javascript - 为什么 `BehaviorSubject` 没有发出最后一个值

标签 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 按预期工作。

最佳答案

问题出在其他地方。

当您使用 ofObservable.subscribe(subject) 时,源 Observable 也会发出 complete 通知,将 Subject 标记为已停止,它将永远不会发出任何东西。

所以这个用例中的解决方案可以只传递 next 信号:

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

查看演示:http://jsbin.com/limurip/3/edit?js,console

关于javascript - 为什么 `BehaviorSubject` 没有发出最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45054985/

相关文章:

Javascript 在 IE8 中不工作

javascript - 用子元素剪辑父元素

angular - 错误 : ExpressionChangedAfterItHasBeenCheckedError when an Angular Component is tested with synchronous Observables

RxJS:带多个 Action 和不同过滤器的 takeUntil?

从 BehaviorSubject 创建的 Angular 2 rxjs 可观察对象不适用于 forkJoin

javascript - 在React js中更新和对象嵌套数组

javascript - 交换两个 <li> 元素

angular - rxjs 5.5.2 中的 Observable.throw 替换

javascript - 使用rxjs5操作符fromEvent时获取 "this"的上下文?

javascript - 如何在自定义 Shiny 输入的 update* 函数中添加 HTML 依赖项