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

easyiscat님의 프로필 이미지
easyiscat

작성한 질문수

함수형 프로그래밍과 JavaScript ES6+

reduce에서 nop 지원

reduceF 함수 내부 acc에 대하여

작성

·

208

0

const check = (acc, f) => (acc instanceof Promise ? acc.then(f) : f(acc));

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

const reduce = curry((f, acc, iter) => {
  if (!iter) {
    iter = acc[Symbol.iterator]();
    acc = iter.next().value;
  }
  return check(acc, function recur(acc) {
    let cur;
    while (!(cur = iter.next()).done) {
      // acc = reduceF(acc, cur.value, f);
      const item = cur.value;
      acc =
        item instanceof Promise ? item.then((a) => f(acc, a)) : f(acc, item);
      if (acc instanceof Promise) {
        return acc.then(recur);
      }
    }
    return acc;
  });
});

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

 

위 코드와 같이 reduce 함수 recur 내부에서

acc = reduceF(acc, cur.value, f); 에서

reduceF 함수에서 acc과

acc = item instanceof Promise ? item.then((a) => f(acc, a)) : f(acc, item); 에서

 

item.then 내부에서 acc이 다르게 동작하는 것 같은데

이유를 알 수 있을까요?

 

reduceF에서 acc은 Promise가 아니지만,

item.then 내부에서 acc은 pending으로 작동합니다.

답변 2

0

유인동님의 프로필 이미지
유인동
지식공유자

힌트는 클로저 :)

0

easyiscat님의 프로필 이미지
easyiscat
질문자

코드 색상이 변하질 않네요,

 

결론은, reduceF 함수를 외부에서 구현했을 경우 인자값 acc과

reduceF를 사용하지않고 코드를 풀어서 작성했을때의 cur.value.then 내부에서 acc의 값이 다르게 동작하는 것 같아서 질문드립니다.

easyiscat님의 프로필 이미지
easyiscat

작성한 질문수

질문하기