Observable.race 是否对两个可观察对象工作不止一次?

Does Observable.race for two observables work more than one time?

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

 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 将停止并且对额外的发出没有更多反应,尽管我确信该效果会一次又一次地执行。

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

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

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