병아리의 코딩 일기

Promise와 resolve(), thenable(), reject() 본문

자바스크립트 ES6+/Promise

Promise와 resolve(), thenable(), reject()

oilater 2023. 12. 29. 02:19

resolve()

  • 성공(fulfilled) 상태의
    • Promise 인스턴스를 생성하여 반환한다.
    • Promise.resolve() 형태로 작성한다.
    • 파라미터 값에 따라 생성 바업이 다르다.
  • 파라미터에 값을 작성하면
    • 파라미터 값으로 Promise 인스턴스를 생성하여 반환
    const obj = Promise.resolve(["sports", "music"]);
    
    obj.then((value) => {
      console.log(value);
    });
    console.log("끝");
    
    1. const obj = Promise.resolve(["sports", "music"]);Array, Object 등을 사용해야 한다.
    2. resolve() 파라미터에 값을 작성했다. 값을 하나만 작성할 수 있으므로 다수를 작성하려면
    3. new 연산자를 사용하지 않지만 Promise 인스턴스를 생성하여 반환한다.
    4. 성공(fulfilled) 상태로 설정한다.
    5. 성공 상태이므로 then()의 첫 번째 파라미터 함수가 호출된다.
    6. obj.then((value) => {log(value)});
    7. Promise.resolve([”sports”, “music”])의 파라미터 값이 value에 설정된다.
  • 파라미터에 Promise 인스턴스를 작성하면
    • 파라미터의 Promise 인스턴스의 값을 사용하여
    • Promise 인스턴스를 생성하여 반환
    const obj = Promise.resolve(["sports", "music"]);
    
    Promise.resolve(obj).then((value) => {
      console.log(value);
    });
    
    // ["sports", "music"]
    
    1. Promise.resolve(obj)
    2. resolve() 파라미터에 Promise 인스턴스를 작성했다.
    3. Promise 인스턴스를 생성하여 반환한다.
    4. 성공(fulfilled) 상태로 설정한다.
    5. then(param) ⇒ {log(param); });
    6. obj 인스턴스의 resolve() 파라미터 값이 param에 설정된다.

thenable

  • Promise.resolve()의 파라미터에
    • then()을 작성한 형태이다.
const obj = Promise.resolve({
  then(resolve, reject) {
    resolve([1, 2]);
  },
});

obj.then((value) => {
  console.log(value);
});
console.log("끝");

reject()

  • 실패(reject) 상태의
    • Promise 인스턴스를 생성하여 반환한다.
    • Promise.reject() 형태로 작성한다.
  • 파라미터에 reject 사유를 작성한다.
  • then()을 연결한 형태
const obj = Promise.reject("실패");
obj.then(
  (value) => {
    console.log(value);
  },
  (value) => {
    console.log(value);
  }
);
  1. 실패 상태이므로 then()의 두 번째 파라미터 함수가 호출된다.
  2. Promise.reject(”실패”)에서 “실패”가 value에 설정된다.
  • catch()를 연결한 형태
const obj = new Error("에러 발생");
Promise.reject(obj).catch((error) => {
  console.log(error.message);
});
console.log("끝");

// 끝
// 에러 발생
  1. Error 인스턴스를 생성한다.
  2. Promise.reject(obj)reject()를 실행하지 않는다.
  3. obj 인스턴스를 사용하여 Promise 인스턴스를 생성한다.
  4. log(”끝”)을 실행한다.
  5. Promise.reject(obj)를 실행하며
  6. catch()가 호출된다.
  7. catch((error) ⇒ log(error.message));
  8. obj 인스턴스가 error에 설정된다.

<aside> 💡 성공, 실패가 결정되어 있는 상태라면 이런 방식으로 프로미스를 생성할 수 있다.

</aside>

728x90
반응형
LIST