如何在RxJS 5中创建Hot Observable

Gre*_*ier 5 javascript rxjs rxjs5

我使用RxJS 4来创建Hot Observable,如官方文档中所述

但是RxJS 5迁移指南没有说明如何创建Hot Observable。

const source = Observable.create((observer) => {
  asynCall((data) => {
    observer.onNext(data)
  })
})
const published = source.publish()
published.connect()
published.subscribe((data) => {
  console.log(data)
})
Run Code Online (Sandbox Code Playgroud)

使用Rx5,我遇到以下错误:

未被捕获的TypeError:source.publish不是函数(…)

sub*_*aze 5

您可以使用.publish().refCount()(或.share()作为别名)

var source = Rx.Observable.interval(1000)
    .take(5)
    .publish().refCount();

source.subscribe( item => console.log(`-: ${item}`));
setTimeout(() => {
    source.subscribe( item => console.log(`--: ${item}`));
}, 2500);
Run Code Online (Sandbox Code Playgroud)

http://jsbin.com/cupibitehu/1/edit?js,控制台

上面设置了两个订阅,以显示延迟的订阅将从发生当前发出的事件开始,而不重播先前发出的结果。

记录以下

"-: 0"
"-: 1"
"-: 2"
"--: 2"
"-: 3"
"--: 3"
"-: 4"
"--: 4"
Run Code Online (Sandbox Code Playgroud)

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-share

  • 如果它是一个热门的 observable,那么你不应该调用 subscribe(),对吗? (2认同)