作为观察者的 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
,随后对主题的订阅将发出主题的当前值。
此代码在控制台中未显示任何内容。但是,如果我用注释代码更改第二行,它就可以工作。这是预期的还是这里有问题?
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
,随后对主题的订阅将发出主题的当前值。