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

쿠크다스님의 프로필 이미지
쿠크다스

작성한 질문수

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

지연 평가 + Promise - L.map, map, take

for of vs while

해결된 질문

작성

·

277

2

안녕하세요.

코드를 작성하면서 실습하는 중입니다. 실습할 때, for of 구문을 이용해서 코드를 작성했는데 이번 take 함수는 의도에 맞게 동작하지 않더라고요. reduce 함수는 for of 구문을 작성해도 잘 작동했는데 이유가 뭘까요?

const go1 = (a, f) => a instanceof Promise ? a.then(f) : f(a);
const reduce = curry((f, acc, iter) => {
if (!iter) {
iter = acc[Symbol.iterator]();
acc = iter.next().value;
}
return go1(acc, function recur(acc) {
for (const e of iter) {
acc = f(acc, e);
if (acc instanceof Promise) return acc.then(recur);
}
return acc;
});
});
const take = curry((l, iter) => {
let res = [];
return function recur() {
// if(e instanceof Promise) return .then(e => {...}) closure에 담긴 iter 상태가 closed로 변경
// for (const e of iter) {
// if(e instanceof Promise) return .then(e => {...}) 문을 만나도 iter가 closed가 되지 않음
let cur;
while (!(cur = iter.next()).done) {
const e = cur.value;
if (e instanceof Promise) return e.then(e => {
if (res.length == l) return res;
res.push(e);
return recur();
})
if (res.length == l) return res;
res.push(e);
}
return res;
}();
});

답변 3

2

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

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

이 질문이 같은 질문인거 같아요. :)

0

쿠크다스님의 프로필 이미지
쿠크다스
질문자

와 빠른 답변 감사합니다. 잘 읽어볼게요~

0

쿠크다스님의 프로필 이미지
쿠크다스
질문자

들여쓰기가 적용이 안되네요 ㅜㅜ 번거롭겠지만 코드 보기 힘드시면 IDE에 복사 붙여넣기 하면 좋을것 같아요~

쿠크다스님의 프로필 이미지
쿠크다스

작성한 질문수

질문하기