您订阅了您的 observable 两次。异步管道在您订阅后在内部执行此操作。
When subscribe
方法正在执行它执行subscribe
功能
observer => this.observer = observer
并覆盖this.observer
属性,因此它仅对异步管道(最后订阅者)有效
我会用share
运算符来解决它
new Observable(observer => this.observer = observer).share();
笨蛋的例子 https://plnkr.co/edit/V5c5YxMuMGJPAFpNW4Di?p=preview
看看为什么this.observer
只需运行此代码即可被覆盖
let myObserver;
const observable$ = new Rx.Observable(function subscribe(observer) {
console.log('subscribe function has been called');
myObserver = observer;
});
observable$.subscribe(function next1() { console.log('next1'); });
observable$.subscribe(function next2() { console.log('next2'); });
observable$.subscribe(function next3() { console.log('next3'); });
myObserver.next();
jsbin.com https://jsbin.com/jodizaz/2/edit?js,console
正如我提到的早期异步管道在内部订阅可观察的
https://github.com/angular/angular/blob/4.3.x/packages/common/src/pipes/async_pipe.ts#L23 https://github.com/angular/angular/blob/4.3.x/packages/common/src/pipes/async_pipe.ts#L23