2017-11-17 11 views
0

タスク:2つのエフェクト(ngrx/store)があります.ef1 $とef2 $はObservablesです。角度成分では、どの成分がトリガされたのかを検出したい。私は、次のコードを追加:Observable.raceは2つのオブザーバブルに対して複数回動作しますか?

Observable.race(ef1$, ef2$) 
    .subscribe((payload) => { 
      if (payload.type == ThreadActions.THREAD_READY_TO_BE_RENDERED) { 
      // do one thing 
      } 
      else if (payload.type == ThreadActions.THREAD_ITEM_READY_TO_BE_RENDERED) { 
      // do another thing 
      } 
     }); 

をしかし、それは効果が何度も何度も実行していることを確認してIのにもかかわらず、最初のObservable.raceが死んだことになるだろう任意のエフェクトのEMITと追加発するの詳細無反応の後にそのように見えます。

答えて

1

それはあなたが希望する機能が何であるかを伝えるのは難しいですが、あなたが使用したい場合raceオペレーターが複数回再送信すると、すぐに再登録することができます:

Observable.defer(() => Observable.race(ef1$, ef2$)) 
    .take(1) 
    .repeat() 
    .subscribe(...); 
+0

ありがとうございます@martin。それが私が探していたものです。しかし、私は再購読のオーバーヘッドについて心配しています。 –

0

Observable.race()は、放出が最初に放出されるものだけを放出する。

次の2つの観察可能なストリームをしたいとあなたはObservable.combineLatestを使用し、発光されます誰でも気にしない別名それらを同時に観察する場合:

Observable.combineLatest(ef1$, ef2$) 
    .subscribe(([ef1,ef2]) => { 

     //ef1.type will be ThreadActions.THREAD_READY_TO_BE_RENDERED 
     //ef2.type will be ThreadActions.THREAD_ITEM_READY_TO_BE_RENDERED 

     //check if ef1 is truthy 
     if(ef1){ 
      //do one thing 
     } 
     if(ef2){ 
      //do another thing 
     } 
    }); 
関連する問題