说我有这个:
const a = new BehaviorSubject(0);
const b = new BehaviorSubject(0);
Observable.zip(
a.asObservable(),
b.asObservable()
)
.subscribe(v => {
// this will fire with [0,0]
// but I want it to also fire with [1,0]
});
a.next(1);
如何实现订阅下一个功能的评论中的内容?我相信我需要找到与Observable.zip()
不同的操作员,例如Observable.first()
。
.zip()
只有在observables
的排放量可取代时才能起作用。对于您的情况,由于0,0
已经被拉开了,因此只会有一种这样的排放。如果您想下一次排放,您的b
主题也必须发出一个值:
const a = new BehaviorSubject(0);
const b = new BehaviorSubject(0);
Observable.zip(
a.asObservable(),
b.asObservable()
)
.subscribe(v => {
// this will fire with [0,0]
// will fire only if both a and b has emisions.
// this also logs [1,1] because there is a b.next(1)
});
a.next(1);
b.next(1); // this step is crucial
如果要检测到任何数量的Observables
合并的任何更改,则必须使用Observable.combineLatest()
。
组合运算符的行为与zip相似,但是虽然zip仅在每个zip sourper source source observables散发出先前没有拉链的项目时才会发出项目,但combinatest在任何一个源可观察物中发出了一个项目(这么长的时间((这么长的时间(由于每个源可观察到至少发出了一个项目(。当任何源可观察到发出项目时,CombineLatest使用您提供的函数结合了来自每个其他源可观察物的最近发出的项目,并从该函数中发出返回值。