작성
·
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 의 차이가 발생하는 이유를 설명해주실 수 있을까요?