我如何正确 invoke/manage 后续订阅我的可观察对象?

How do I properly invoke/manage subsequent subscriptions for my observable?

试图创建一个可推送给所有订阅者的可观察对象,但我 运行 遇到了多个订阅的问题。据我了解,订户管理是自动为我处理的。在下面的示例中,我的目标是同时记录 'a' 和 'b'。

let observer = null as any;
let ob$ = new Observable<any>(ob => {
     //this piece of code will be called twice, over-writing the original 
     observer = ob;
});

ob$.do(() => console.log("a")).subscribe();
ob$.do(() => console.log("b")).subscribe(); //only 'b' is called

observer.next();
observer.complete();

问题在于您如何使用 new Observable()(这等同于使用 Observable.create())。

每次您订阅 ob$ 时,都会在您覆盖 observer 的地方调用对 new Observable() 的回调。然后,当您调用 observer.next() 时,您仅在第二个 Observer 上调用 next

换句话说,"a" 永远不会被打印出来,因为当您订阅 ob$.[=26 时,您永远不会在 new Observable() 内部创建的 Observer 上调用 next =]

一般来说,这不是使用 new Observable() 的好方法,而您尝试做的事情更好 Subject

let observer = null as any;
let subject = new Subject();
let ob$ = subject.asObservable();

ob$.do(() => console.log("a")).subscribe();
ob$.do(() => console.log("b")).subscribe(); //only 'b' is called

subject.next();
subject.complete();

观看现场演示:http://jsbin.com/hocagar/4/edit?js,console

这会打印:

a
b