作为观察者的 BehaviorSubject

BehaviorSubject as an observer

此代码在控制台中未显示任何内容。但是,如果我用注释代码更改第二行,它就可以工作。这是预期的还是这里有问题?

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

此行为是设计使然。

第一个 subscribe 调用看到主体的 complete 方法被调用,因为源 observable 完成。

一旦对象的 complete 方法被调用,BehaviorSubject 就完成了,不会发出更多的值。

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

当您将第二行替换为:

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

当源 observable 完成时,将不再调用主题的 complete,随后对主题的订阅将发出主题的当前值。