02. 직접 만들어보는 Promise 객체

🙋‍♂️ 직접 만들어보는 Promise 객체

01) fetch, then, catch[Promise] 이해하기 설명문에서는 fetch 함수에서 리턴되는 promise 객체를 사용했습니다. 그런데 사실 이렇게 어떤 함수가 리턴하는 promise객체를 가져다가 쓰는것이 아니라, 직접 promise 객체를 생성하는것도 가능 합니다.

이번에는 직접 promise객체를 만드는 방법에 대해서 알아보겠습니다.

아래 코드가 바로 promise 객체를 직접 생성하는 코드 입니다.

//  promise 객체를 직접 생성하는 코드

const p = new Promise((resolve, reject) => {

});

바로 이 부분이 promise 객체를 생성합니다.

여기서 중요한것은 파라미터로 들어간 'executor'라는 함수 입니다. 또 함수 파라미터에는 resolve, reject가 있습니다. 이 2 파라미터는 아주 특별한 의미가 있습니다.

setTimeout함수를 써서 2초 후에 resolve 함수로 연결된 파라미터를 실행하도록 했습니다. resolve 함수는 promise 객체를 fulfilled상태로 만드는 함수 입니다.

promise 객체를 fulfilled상태로 만들어 보겠습니다.

const p = new Promise((resolve, reject) => {
    setTimeout(() => {resolve('success');}, 2000);
});

그렇다면 p라는 promise 객체가 2초후에 fulfilled상태로 된다는 뜻입니다. 그리고 이때 resolve 함수안에 넣은 'success'문자열이 작업성공 결과가 됩니다.

const p = new Promise((resolve, reject) => {
    setTimeout(() => {resolve('success');}, 2000);
});

p.then((result) => {console.log(result);});
// 결과) 2초 후에 
success

이번에는 Promise 객체를 reject상태로 만들어 보겠습니다.

reject함수는 생성되는 promise 객체를 reject상태로 만듭니다. 그리고 reject함수에 아규먼트로 에러객체가 작업 실패 정보가 됩니다.

const p = new Promise((resolve, reject) => {
    // setTimeout(() => {resolve('success');}, 2000);
    setTimeout(() => {reject(new Error('fail')); }, 2000); //resolve험수를 reject함수로 바꿨습니다. 
});

p.catch((error) => {console.log(error);});
// 결과) 2초 후에 
Error: fail

이번에는 간단한 Promise 객체를 직접 만들어 보었습니다.

Last updated