为什么`BehaviorSubject`不会发出最后一个值

时间:2017-07-12 10:22:18

标签: javascript rxjs

documentation on BehaviorSubject表示它应该返回最后一个发出的值,无论我何时订阅但是它都没有为我返回:

const ofObservable = Rx.Observable.of(1, 2, 3);
const subject = new Rx.BehaviorSubject();
ofObservable.subscribe(subject);

subject.subscribe((v) => {
    console.log(v);
}, null, () => {
    console.log('completed');
});

代码仅记录completed

ReplaySubject按预期使用上述代码并记录1, 2, 3, completed

1 个答案:

答案 0 :(得分:3)

问题出在其他地方。

当您使用ofObservable.subscribe(subject)时,源Observable也会发出complete通知,该通知会将Subject标记为停止,并且永远不会发出任何内容。

因此,此用例中的解决方案只能传递next信号:

ofObservable.subscribe(val => subject.next(val)); 

请参阅演示:http://jsbin.com/limurip/3/edit?js,console