2017-10-03 4 views
0

私はネストされたサブスクリプションを持っています。それは良い方法ではないと信じています。ang 4 - ネストされたサブスクリプションを書き換える方法

ネストされたサブスクリプションではないように、以下をどのように書き直すことができますか?

this.pagesService.postReorderPages(ids).subscribe(res => { 
        if (res === "ok") { 
         console.log(res); 
         this.pagesService.getPages().subscribe(pages => { 
          this.pagesService.pagesBS.next(pages); 
          console.log(pages); 
         }); 
        } 
       }); 
+5

[RxJs Observables Observables Nested Subscriptions?](https://stackoverflow.com/questions/42888604/rxjs-observables-nested-subscriptions)の重複している可能性があります。 – Moema

答えて

1

は、私はいつも人々がストリームでロジック、および効果内部のサブスクリプションまたは.do()コールバックを保つために最善を尽くすことをお勧めします。だから、ネストされたサブスクリプションを回避するあなたの本能はポイントにあると思う。

this.pagesService.postReorderPages(ids) 
    .filter(res => res === 'ok') // moved logic from your subscription to stream 
    .mergeMap(() => this.pagesService.getPages()) 
    .subscribe(pages => { 
     this.pagesService.pagesBS(pages); 
    }); 

あなた自身が、ネストされたサブスクリプションを避けるためにしようとして見つけた場合、しばしばあなたは*Map演算子のいずれかのために到達したいです。 rxjs

、彼らはすべてが少し異なる振る舞いこれら

  1. mergeMap
  2. concatMap
  3. switchMap
  4. exhaustMap

の4があるので、私は保証することはできませんこれはあなたの機能を実装するfectly。しかし、それらはすべて同じシグネチャを持ち、「乱雑」なネストされたサブスクライブ(いくつかのライブラリでは「高次」ストリームまたは「メタ」ストリームと呼ばれることもあります)を処理するために存在します。

関連する問題