2017-05-19 1 views
-1

다른 API 호출을하기 위해 redux 저장소에서 데이터를 가져 와서 응답을 저장소에 저장해야합니다. 이 경우 callback 지옥을 어떻게 피할 수 있습니까?ngrx observables를 사용하여 콜백 지옥을 피하는 방법

관찰 가능 항목을 구독하는 코드 스 니펫은 다음과 같습니다.

스토어

this.user$ = this.store.select('user'); 
this.dataStore$ = this.store.select('dataStore') 

콜백 지옥

this.user$.subscribe((user: any) => { 
    this.abcService.getData(user.id).subscribe((data:any) => { 
    this.data = data; 
    this.dataStore$.dispatch(abcAction(data)); 
    } 
} 

이 위의 콜백을 회피하는 방법. 약속의 세계에서 우리는 쉽게 약속을 묶을 수 있습니다. observables은 체인 가능하지 않기 때문에 중첩 된 콜백을 피하는 방법과 위의 코드를 작성하는 가장 좋은 방법은 무엇입니까? 최상의 rxjs 연산자를 적용 할 수있는 방법을 알고 싶습니다.

도움을 주시면 대단히 감사하겠습니다.

+2

[각도 2 : 첫 번째 서비스 성공시 두 개의 백엔드 서비스 호출] 가능한 복제본 (http://stackoverflow.com/questions/36712659/angular-2-two-backend-service-calls-on-success-of) -first-service) – echonax

답변

4

rxjs 많은 연산자를 활용하고 싶습니다. 예를 들어, 다음과 같은 위의 코드를 다시 작성할 수 있습니다

this.user$ 
.flatMap((user: any) => this.abcService.getData(user.id)) 
.subscribe((data: any) => { 
    this.data = data; 
    this.dataStore$.dispatch(abcAction(data));  
}); 

당신은 당신의 Promisethen()의 이러한 다른 사업자 생각하지만 그들은 더 많은 일을 할 수 있기 때문에 더 강력 할 수 있습니다.

+0

모든 rxjs 운영자에 대한 예제가있는 좋은 설명서가 있습니까? – Wishnu

+2

@Wishnu 물론 있습니다. 이 페이지는 도움이됩니다. http://reactivex.io/rxjs/manual/overview.html#categories-of-operators – lbrahim

관련 문제