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(...);
任务是:我有两个效果 (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(...);