• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

acc.then(acc => f(acc,a)); 와 acc.then(recur)의 차이점에 대해서

22.07.27 19:05 작성 조회수 151

1

안녕하세요, 좋은 강의 잘 보고 있습니다.

[ 1 ]

for(const a of iter){

  acc = acc instanceof Promise ? acc.then(acc => f(acc,a)) : f(acc,a)

}

의 동작과

 

___

 

[ 2 ]

 

for(const a of iter){

  acc = f(acc,a);

  if(acc instanceof Promise) return acc.then(recur)

}

 

의 동작의 차이가

 

[ 1 ]에서는
Promise.then과 같은 Promise와 체이닝 메서드의 반환값은 Promise이기 때문에
Promise를 만난 이후 부터 go에서 동작하는 iter내부의 함수들이
콜 스택이 아니라 태스크 큐에서 동작하기 때문에 약간의 성능 저하가 발생할 수 있지만,

 

[ 2 ] 에서는

acc instanceof Promise 라면,
return acc.then(acc => recur(acc)); 을 진행하게 되는데,

recur에 넣어준,

acc.then(acc => )에서 then 의 인자로 받은 acc는

Promise.then의 반환값이 아니지만, Promise의 반환 값인데, 이미 비동기 상황이 끝났기 때문에 콜스택에서 동작한다고 이해했는데 맞을까요??

 

 

 

답변 1

답변을 작성해보세요.

0

ㄴㅔ 맞습니다 :)