인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

GD님의 프로필 이미지
GD

작성한 질문수

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

reduce에서 nop 지원

for 와 while 동작 차이

작성

·

170

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

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

GD님의 프로필 이미지
GD

작성한 질문수

질문하기