此代码在控制台中不显示任何内容。但是如果我用注释代码改变第二行就可以了。这是预期还是有问题?
let bSubject = new BehaviorSubject<any>(1);
of(2).subscribe(bSubject); // of(2).subscribe(data => bSubject.next(data));
bSubject.subscribe(data => console.log(data));
答案 0 :(得分:1)
行为是按设计的。
第一次subscribe
调用会看到主题的complete
方法被调用,因为源可观察性完成。
调用主题complete
方法后,BehaviorSubject
即完成,不会再发出任何值。
也就是说,在已完成的next
上调用BehaviorSubject
将不会发出值,并且订阅已完成的BehaviorSubject
不会发出初始值。
将第二行替换为:
of(2).subscribe(data => bSubject.next(data));
当源观察结束时,将不再调用主题complete
,并且随后对主题的订阅将发出主题的当前值。