为什么观察者可以在订阅之前看到 Observable 生成的值

Why the observer can see values generated by the Observable before it was subscribed to it

我想知道为什么在延迟 3200 秒后订阅这个 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);

Observables 默认是冷的。这意味着它们是懒惰的,只有在观察者订阅它们时才会变得活跃。

你想要的是一个热的 Observable。您可以通过在其上调用 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);