new Promise로 프로미스를 생성할 수 있으며, 안에 resolve와 reject를 매개변수로 갖는 콜백 함수를 넣습니다. 이렇게 만든 promise 변수에 then과 catch 메서드를 붙일 수 있습니다. 프로미스 내부에서 resolve가 호출되면 then이 실행되고, reject가 호출되면 catch가 실행됩니다. finally 부분은 성공/실패 여부와 상관없이 실행됩니다.
resolve와 reject에 넣어준 인수는 각각 then과 catch의 매개변수에서 받을 수 있습니다. 즉, resolve('성공')이 호출되면 then의 message가 '성공'이 됩니다. 만약 reject('실패')가 호출되면 catch의 error가 '실패'가 되는 것입니다. condition 변수를 false로 바꿔보면 catch에서 에러가 로깅됩니다.
프로미스를 쉽게 설명하자면, 실행은 바로 하되 결괏값은 나중에 받는 객체입니다. 결괏값은 실행이 완료된 후 then이나 catch 메서드를 통해 받습니다. 위 예제에서는 new Promise와 promise.then 사이에 다른 코드가 들어갈 수도 있습니다. new Promise는 바로 실행되지만, 결괏값은 then을 붙였을 때 받게 됩니다.
then이나 catch에서 다시 다른 then이나 catch를 붙일 수 있습니다. 이전 then의 return 값을 다음 then의 매개변수로 넘깁니다. 프로미스를 return한 경우 프로미스가 수행된 후 다음 then이나 catch가 호출됩니다.
promise .then((message) => { return new Promise((resolve, reject) => { resolve(message); }); }) .then((message2) => { console.log(message2); return new Promise((resolve, reject) => { resolve(message2); }); }) .then((message3) => { console.log(message3); }) .catch((error) => { console.error(error); });