[javascript] "콜백 지옥"이란 무엇이며 RX가 어떻게 그것을 왜 해결합니까?


1 Answers

그냥 질문에 답하십시오. RX가 간단한 예제에서 "콜백 지옥 문제"를 해결하는 방법을 보여줄 수 있습니까?

마술은 flatMap 합니다. flatMap . @ hugomg의 예제에서 Rx에 다음 코드를 작성할 수 있습니다.

def getData() = Observable[X]
getData().flatMap(x -> Observable[Y])
         .flatMap(y -> Observable[Z])
         .map(z -> ...)...

마치 동기 FP 코드를 작성하는 것과 같지만 실제로는 Scheduler 비동기로 만들 수 있습니다.

Question

누군가 JavaScript와 node.js를 모르는 사람을위한 "callback hell"이 무엇인지 설명하는 간단한 예제와 함께 명확한 정의를 줄 수 있습니까?

어떤 종류의 설정에서 "콜백 지옥 문제"가 발생합니까?

왜 그런가?

"콜백 지옥"은 항상 비동기 계산과 관련이 있습니까?

아니면 "콜백 지옥"도 단일 스레드 응용 프로그램에서 발생할 수 있습니까?

Coursera에서 Reactive Course를 수강했고 Erik Meijer는 RX가 "callback hell"의 문제를 해결한다는 그의 강의 중 하나에서 말했다. 나는 Coursera 포럼에서 "callback hell"이 무엇인지 물어 봤지만 명확한 답을 얻지 못했습니다.

간단한 예제에서 "callback hell"을 설명하고 나면, RX가 어떻게 그 간단한 예제에서 "callback hell problem"을 해결하는지 보여줄 수 있습니까?




Rx가 콜백 지옥을 해결하는 방법에 대한 문제를 해결하려면 다음을 수행하십시오.

먼저 콜백 지옥을 다시 설명해 보겠습니다.

사람, 행성 및 은하계와 같은 세 가지 리소스를 얻으려면 http를 수행해야한다는 경우를 상상해보십시오. 우리의 목표는 그 사람이 살고있는 은하계를 찾는 것입니다. 먼저 그 사람과 그 다음 행성을 얻고 은하계를 얻어야합니다. 이것은 세 가지 비동기 작업에 대한 세 가지 콜백입니다.

getPerson(person => {
   getPlanet(person, (planet) => {
       getGalaxy(planet, (galaxy) => {
           console.log(galaxy);
       });
   });
});

각 콜백은 중첩되어 있습니다. 각각의 내부 콜백은 그 부모에 의존한다. 이것은 콜백 지옥의 "운명의 피라미드"스타일로 연결됩니다. 코드는> 기호처럼 보입니다.

RxJ에서 이것을 해결하기 위해 다음과 같이 할 수있다.

getPerson(person)
  .map(person => getPlanet(person))
  .map(planet => getGalaxy(planet))
  .mergeAll()
  .subscribe(galaxy => console.log(galaxy));

mergeMap AKA flatMap 연산자를 사용하면 더 간결하게 만들 수 있습니다.

getPerson(person)
  .mergeMap(person => getPlanet(person))
  .mergeMap(planet => getGalaxy(planet))
  .subscribe(galaxy => console.log(galaxy));

보시다시피 코드는 병합되고 메서드 호출의 단일 체인을 포함합니다. 우리에게는 "운명의 피라미드"가 없습니다.

따라서 콜백 지옥은 피할 수 있습니다.




Related