inflearn logo
강의

講義

知識共有

関数型プログラミングとJavaScript ES6+

reduceでnopをサポート

함수를 분리하지 않고 실행하게 되면 순환참조 오류가 발생합니다...

621

shut up and squat

投稿した質問数 32

0

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

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

이렇게 실행하면

Uncaught (in promise) TypeError: Chaining cycle detected for promise #<Promise>

위와 같이 순환참조 오류가 발생하는데 이렇게 발생하는 이유가 아래와 같은 순서로 인해 발생하는게 맞는지 확인좀 부탁드립니다...

  1. acc에 a.then메서드가 호출된 결과로 이때 pending 상태의 Promise 객체가 할당됨

     

  2. a.then메서드의 콜백함수가 실행되며 1번의 pending상태의 Promise객체가 리턴

     

  3. pending상태이기 때문에 settled상태가 아니며 프로미스 체이닝이 불가능 하고 프로미스를 사용 할 수 없는 무한정 대기상태에 빠짐

 

프로미스 다루는게 무진장 어렵다는것을 한 강의 한 강의 마다 느낍니다...

함수형-프로그래밍 함수형-프로그래밍 javascript

回答 1

0

mduniv

코드를 제대로 보지 않았지만 아마도 익명함수가 선언된 상위 스코프에서 상태를 변환시키고 있는 부분이 있기 때문일거에요. 죄송하지만 제 강의에 작성한 코드가 아닌 코드가 왜 동작안하는지 체크해서 정확히 알려드리는 일은 조금 부담스러운거 같아서 충분한 답변이 안되었을 수 있지만 양해부탁드립니다!

 

0

shut up and squat

아 제가 추상적으로 함수라고 질문 했네요...

강의에서 나온 코드에서 reduceF함수로 분리하지 않고

reduce 함수에서 처리 했을 경우 발생하는 오류에 대해서 여쭤봤습니다...!

0

mduniv

네 아마도 acc 가 변하기 때문일거에요~ :)

프론트엔드 실무에서 어떤때에 쓰이는지 궁금합니다

1

111

1

함수형 프로그래밍 심화 강의 자료 추천

0

72

2

함수형 자바스크립트 프로그래밍 책

0

54

1

filter가 아무것도 걸러내지 못하는 경우

0

114

1

take 함수의 성능적면에서의 이점

1

463

1

pipe함수

1

531

1

Identity 함수

0

450

1

함수형 프로그래밍이란

0

832

1

reduce 예제 코드 제안!

0

405

1

fxts를 배워보려고 합니다.

1

537

1

flatMap 관련 질문드립니다~

1

444

1

다용성이 높은 L.flatMap

0

358

1

변수에 재 할당 금지~

0

540

1

DevTools라고 옆에 결과 확인하는거 어떻게 하나요?

0

483

2

소요시간에 관해서 질문드립니다

1

458

1

join에 대한 내용이 궁금증이 해결되지 않아서 질문드립니다!

0

465

2

reduce에 L.range를 사용할 때

0

527

2

[이해내용 공유] Lazy 에서 C.reduce가 병렬 효과를 내는 이유

3

739

2

제가 이해한 C.Reduce와 Reduce의 동작 차이 정리

2

787

3

go, pipe 함수 관련하여 질문 드립니다.

1

499

1

안녕하세요 강사님!

0

380

2

fxts에 go가 없는 이유?

0

840

1

비동기 관련 질문입니다!

0

462

1

질문 있습니다.

0

517

1