이미 Fulfilled 된 Promise

About JS, JS미세팁
2024/08/16

then

then이란 어감 때문에 Promise의 상태가 Pending에서 변경될 때 콜백이 실행될 것 같지 않나요? 저는 그랬는데.

하지만 그렇지 않습니다.

then은 Promise가 이행되거나 거부되었을 때 실행되는 Promise 객체의 메서드로

Promise의 상태 변경과는 '직접적인' 연관은 없습니다. FulfilledRejected라면 핸들러 함수를 실행할 뿐이죠.

다만 중요한 점은 이미 FulfilledRejected 상태에서 실행하더라도, 동작 방식은 같아 핸들러를 태스크 큐에 넣어 즉시 실행한다는 점입니다.
const a = Promise.resolve(1);
a.then((res) => console.log(res));
a.then((res) => console.log(res));
console.log(123);

// 123
// 1
// 1

따라서 123이 먼저 출력되게 됩니다.

async await

async / await도 마찬가지입니다.

const a = Promise.resolve(1);
async function b() {
  console.log(await a);
  console.log(await a);
}
b();
// 1
// 1

프로미스의 상태 변경 자체와는 상관없이 Promise가 이행되었다면 코드를 실행합니다.