잘하고싶다개발
45
2020-01-13 15:01:00 작성 2020-01-13 15:11:59 수정됨
3
445

nodejs promise return 관련 질문 드립니다.


안녕하세요~~


node promise return 관련하여 궁금한게 있어 문의 드립니다.


1)

promiseFunction()

.then(() => {

return "value";

})

.then((re) => {

return re + "value2";

})


2)

promiseFunction()

.then(() => {

return Promise.resolve("value");

})

.then((re) => {

return Promise.resolve(re + "value2");

})



1번과 2번을 실행 시키면 결과로만 봤을땐 동일하게 보이는데,

정확히 어떤 차이가 있을까요?


많은 답변 혹은 조언 부탁드립니다.!

고맙습니다.

0
  • 답변 3

  • aksjm2
    1k
    2020-01-13 15:24:46

    Promise 객체를 return 하는 것과, 아닌것의 차이를 확인해 보시면 빠를것 같아요.

    단순하게 생각했을때는,

    1번 방식으로 return 하게 되면 resolve 된 상태인지, error 상황인지 확인이 안될것 같네요.

    .catch() 블럭이 사용될 일이 없을지도..

    2번 방식으로 사용하면 해당 동기식 블럭이 성공되었다고 return 하게 되어

    중간에 발생할 수 있는 오류에 대한 catch가 좀 더 명확하다고 생각됩니다.


    -- 저도 자세히는 잘 모르겠어요.

    또한, async, await 구문으로 사용하기 위해서는 2번 방식으로 promise 객체를 return 해야한다고 알고 있습니다.

  • 원푠듯
    290
    2020-01-13 16:14:43 작성 2020-01-13 16:33:59 수정됨

    실제로 저런 식의 비교를 할 일이 없어 찾아본 일이 없는데, 흥미로운 케이스라 이번 기회에 찾아보았습니다.


    Promise.resolve는 함수명대로 resolved 된 promise-like 객체를 리턴하는 정적 메서드입니다. new Promise로 객체를 생성하는 것과 똑같이 then 메서드 내부에서 발생한 에러 핸들링도 가능하죠.


    직관적으로 봤을 때 2번의 케이스는 then 메서드가 두 번째 then 체인에서 re 매개변수로 promise-like 객체를 가져와야 맞을 듯하지만, 자바스크립트에서는 내부적으로 then 메서드 내부에서 반환된 값이 promise-like일 경우 반환된 값 그대로를, 아닐 경우 promise-like 객체로 만들어 반환합니다(출처: https://developers.google.com/web/fundamentals/primers/promises#queuing_asynchronous_actions).


    그러니 1, 2번의 실행 결과가 똑같이 나오는 것이죠. then 메서드가 특이한 메서드라는 걸 모르면 오히려 "왜 Promise를 리턴해도 매개변수로 Promise를 가져오지 않지?"라는 질문이 나올 수밖에 없는 케이스였네요.

  • 잘하고싶다개발
    45
    2020-01-13 16:47:02

    @원푠듯

    답변 정말 고맙습니다!!

    Then 메소드가 내부적으로 어떻게 처리가 되고 있을지에 대해서는 전혀 생각을 못하고 있었네요;;

    덕분에 결과에 대해 이해가 됐으며 정말 많은 도움이 되었습니다!


    다시한번 감사의 말씀 드립니다~!!


    @aksjm2
    님도 답변 고맙습니다 ^^.

  • 로그인을 하시면 답변을 등록할 수 있습니다.