• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

for 와 while 동작 차이

20.04.27 19:24 작성 조회수 123

0

const reduce = curry((f, acc, iter) => {
    const head = iter => go1(take(1, iter), ([h]) => h);
    
    if (!iter) return reduce(f, head(iter = acc[Symbol.iterator]()), iter);

    iter = iter[Symbol.iterator]();
    return go1(acc, function recur(acc) {
        // WARN: 여기선 for 문을 쓰면 안됨 
        for (let a of iter) {
            // Promise 확인용 함수 reduceF 를 이용
            acc = reduceF(acc, a, f);
            if (acc instanceof Promise) return acc.then(recur);
        }
        return acc;
    });
})

여기서 for 와 while 의 동작 차이가 발생합니다.

기존 recur 함수 안의 while 문을 for 로 대체하였을때 두번째 recur 실행 부터 iterator 가 정상적으로 실행되지 않고 종료가 되버립니다.

이는 Promise 로 변경하였을때만 발생하였습니다.

go([1, 2, 3, 4, 5, 6],
    L.map(a => a * a),
    L.filter(a => a % 2),
    reduce(add),
    console.log
) // 정상 동작

혹시여기서 for 와 while 의 차이가 발생하는 이유를 설명해주실 수 있을까요?

답변 1

답변을 작성해보세요.

0

https://www.inflearn.com/questions/17067

요 질문이 동일한 질문인듯 합니다 :)