2017-05-19 9 views
-1

もう一つのAPI呼び出しを行うためにreduxストアからデータを取得する必要があり、レスポンスをストアに保存する必要があります。この場合、どうすればcallback地獄を避けることができますか?ngrx observablesでコールバックhellを回避する方法

以下は、オブザーバブルにサブスクライブするコードです。

ストア

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:最初のサービスが成功した場合の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() sとこれらの異なる事業を考えるが、彼らはより多くを行うことができますので、より強力なことができます。

+0

rxjsのすべての演算子に関する例がある良い文書はありますか? – Wishnu

+2

@Wishnuもちろんあります。このページは参考になります:http://reactivex.io/rxjs/manual/overview.html#categories-of-operators – lbrahim

関連する問題