任务是:我有两个效果(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将会死亡并且对其他发射没有任何反应,尽管我确定效果会一次又一次地执行。
答案 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
}
});