我想知道为什么在延迟3200s之后订阅此Observable时,观察者将采用他通常会错过的第一个值(从0到2),并从值3开始:
const interval$ = Rx.Observable.interval(1000);
setTimeout(() => {
interval$.subscribe({
next : item => console.log("one.next : " + item),
error : error => console.log("one.error : " + error),
complete : () => console.log("one.complete")
});
}, 3200);
答案 0 :(得分:1)
默认情况下,Observable很冷。这意味着它们是懒惰的,只有在Observer订阅它们时才会变为活动状态。
你想要的是一个热门观察。您可以通过调用publish()
来对其进行冷观察,并在热观察上调用connect()
方法。然后它开始发出值而不管任何观察者。它还可以在this fiddle中看到观察者之间的值。
另见this medium post by Ben Lesh解释冷热观测值之间的差异。
完整代码:
const interval$ = Rx.Observable.interval(100);
const hotInterval$ = interval$.publish();
hotInterval$.connect();
setTimeout(() => {
hotInterval$
.take(5) // stop after five values for debugging purposes
.subscribe({
next : item => console.log("one.next : " + item),
error : error => console.log("one.error : " + error),
complete : () => console.log("one.complete")
})
}, 320);
setTimeout(() => {
hotInterval$
.take(5) // stop after five values for debugging purposes
.subscribe({
next : item => console.log("two.next : " + item),
error : error => console.log("two.error : " + error),
complete : () => console.log("two.complete")
})
}, 450);