从示例运算符(Rxjs-sample)的RxJS文档中,它说:
每当通知程序Observable发出一个值或完成时,sample会查看源Observable并发出自上一次采样以来最近发出的任何值,除非源自上一次采样后没有发出任何内容。
但是,以下代码似乎表现不正常:
Rx.Observable.zip(
Rx.Observable.from(['Joe', 'Frank', 'Bob']),
Rx.Observable.interval(2000)
)
.sample(Rx.Observable.interval(2500))
.subscribe(console.log);
输出如下:
[ 'Joe', 0 ]
[ 'Frank', 1 ]
为什么输出不包括[' Bob',2]?
答案 0 :(得分:2)
这是预期的行为。 当notifier
Observable完成时,source
Observable无法完成。随时可以完成;在source
Observable之前或之后。这段文档:
每当通知程序Observable完成时
仅指notifier
Observable在source
Observable之前完成的情况。你的notifier
Observable:
Rx.Observable.interval(2500)
永远不会完成,因此只会考虑source
Observable仍处于活动状态时发出的值。绘制粗糙的大理石图:
Source: -----O-----O-----O|
Notifier: ------O------O------O--...
只有notifier
Observable上的前两个弹珠才会使sample
发出值。当source
Observable死亡时,整个链都死了,notifier
Observable不再重要。事实上,我敢打赌Rxjs足够聪明,可以取消订阅,以免造成内存泄漏。