两个可观察对象的Observable.race是否可以工作多次?

时间:2017-11-17 15:51:35

标签: rxjs store effects ngrx

任务是:我有两个效果(ngrx / store),比方说ef1 $和ef2 $,它们是Observables。在角度分量中,我想检测哪一个被触发。我添加了以下代码:

 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
          }
        });

但看起来在第一次发出任何效果之后,Observable.race将会死亡并且对其他发射没有任何反应,尽管我确定效果会一次又一次地执行。

2 个答案:

答案 0 :(得分:2)

很难说出你想要的功能是什么,但是如果你想多次使用race运算符,你需要在它立即重新发布时完成链:

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

答案 1 :(得分:0)

Observable.race()只会排放先发射的物质。

如果你想要两个Observable流并同时观察它们,你也不关心将要发射的是谁,请使用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
        }
    });