具有自定义创建逻辑的RxJS BehaviorSubject

时间:2018-11-07 12:35:01

标签: rxjs

由于BehaviorSubject扩展了SubjectSubject扩展了Observable,所以这三者都有静态的.create(observer)方法,可以使用自定义值发射逻辑来创建它们。 br /> 例如,我可以使用Observable.create(observer)取得良好的结果:

a = Rx.Observable.create(obs => {
    setInterval(() => {
        obs.next('tick');
    }, 500)
})
s = a.subscribe(v => console.log(v))

为我提供预期的输出(每500毫秒{tick

但是当我将Observable替换为Subject / BehaviorSubject时,并不是很愿意启动并运行:

a = Rx.Subject.create(obs => {
    setInterval(() => {
        obs.next('tick');
    }, 500)
})
s = a.subscribe(v => console.log(v)); // Nothing
a.next(5); // Still nothing

基本上,只有通过new运算符(如下所示)创建主题时,主题似乎才能正常工作:

a = new Rx.Subject();
s = a.subscribe(v => {console.log(v)});
a.next(5) // Ok, got value here

即使我尝试使用非参数化的create方法,该调用也应归结为与使用new相同的结果:

a = Rx.Subject.create();

我仍然无法强迫它发出值。

我知道主题被设计为从外界接收值(而不是在内部将其作为Observable生成),因此主题应由带有subject.next('value')的外部代码触发,但我只是想知道,如果它们与Observable严格相关,create之后的逻辑以及进一步的行为应相同...

任何人都可以解释一下,为什么在create上使用Subject(即使不是为了这种方式工作,但仍然有可能)却不能按预期的方式工作?

0 个答案:

没有答案