인프런 커뮤니티 질문&답변

깁스님의 프로필 이미지
깁스

작성한 질문수

JavaScript 비동기 프로그래밍 완벽 가이드 - Promise, await, async

Promise 객체에 대해서

Promise 객체 강의 7분 27초 부분 질문입니다.

작성

·

361

·

수정됨

1

const p = add(1,2);

console.log(p); //Promise { <pending> }

const t = p.then(....).catch(....).finally(...)

이 때 총 4개의 각각 다른 프라미스가 생성된 상태라고 이해했습니다.

1) p - 프라미스 P1 (add 에서 리턴한 프라미스)
2) p.then - 프라미스 P2 (P1.then 에서 리턴한 프라미스)
3) p.then().catch() - 프라미스 P3 (P2.catch 에서 리턴한 프라미스)
4) p.then().catch.().finally() - 프라미스 P4 (P3.finally 에서 리턴한 프라미스)

결과는 아래처럼 되는거라고 생각했구요.


P1가 리졸브(3) 이므로 then 실행했고 3 출력, 리턴이 없으므로 리졸브-언디파인드
P2는 fulfilled(리졸브-언디파인드) 이므로 catch 실행했고 에러가 아니므로 리졸브-언디파인드
P3는 fulfilled(리졸브-언디파인드) / rejected 이므로 finally 실행했고 'finally' 출력, 리턴이 없으므로 리졸브-언디파인드

P4는 함수반환과 관계없이 P3와 동일한 상태임. fulfilled(리졸브-언디파인드) 인데 등록된 콜백이 없으므로 이대로 끝.


그런데 강의에서 설명하실 때는 P1 프라미스에

then, catch, finally 함수로 콜백을 등록한 것처럼 느껴져서요.

제가 이해한 내용이 맞는지 궁금합니다.

 

 

 

 

 

답변 2

2

드라진님의 프로필 이미지
드라진
지식공유자

then, catch, finally 함수는 callback 함수입니다.

즉, p.then() 함수는 fulfilled 또는 rejected 상태가 되면 callback을 호출하고

결과 Promise를 반환합니다.

callback 함수의 반환 값이 없으면, Promise(undefined)를 반환하게 됩니다.

 

그러므로, p.then().catch()는 Promise(undefined).catch()가 되고,

fulfilled 상태이므로 error 상황이 아니어서 그대로 Promise(undefined)가 반환됩니다.

p.then().catch().finally()에서도 Promise(undefined).finally()가 실행되고,

여기서 undefined 가 출력됩니다.

 

이해하신 내용이 맞는 것 같습니다.^^

 

0

깁스님의 프로필 이미지
깁스
질문자

감사합니다. 오늘 영상을 다시 보면서 알려주신 내용과 비교해보니 이제야 강의와 답변을 모두 이해한 것 같습니다.

드라진님의 프로필 이미지
드라진
지식공유자

정확하게 알려고 노력하는 모습이 좋습니다. 계속 노력하시면 경쟁력 있는 소프트웨어 개발자가 될 것입니다.

깁스님의 프로필 이미지
깁스

작성한 질문수

질문하기