BehaviorSubject作为观察者

时间:2018-04-23 13:11:45

标签: rxjs5 behaviorsubject

此代码在控制台中不显示任何内容。但是如果我用注释代码改变第二行就可以了。这是预期还是有问题?

let bSubject = new BehaviorSubject<any>(1);
of(2).subscribe(bSubject); // of(2).subscribe(data => bSubject.next(data));
bSubject.subscribe(data => console.log(data));

1 个答案:

答案 0 :(得分:1)

行为是按设计的。

第一次subscribe调用会看到主题的complete方法被调用,因为源可观察性完成。

调用主题complete方法后,BehaviorSubject即完成,不会再发出任何值。

也就是说,在已完成的next上调用BehaviorSubject将不会发出值,并且订阅已完成的BehaviorSubject不会发出初始值。

将第二行替换为:

of(2).subscribe(data => bSubject.next(data));

当源观察结束时,将不再调用主题complete,并且随后对主题的订阅将发出主题的当前值。