2017-09-01 29 views
0

试图创建一个可以推送给所有订阅者的可观察对象,但是我遇到了多个订阅的问题。这是我的理解,订户管理是为我自动处理的。在下面的例子中,我的目标是记录'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(); 

回答

0

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

每当您订阅ob$时,调用new Observable()的回调称为覆盖observer的地方。然后,当您致电observer.next()时,您只需在第二个观察者上拨打next即可。

换句话说"a"从不打印,因为你永远不会调用next上是内new Observable()创建时您订阅ob$观察。

一般来说,这不是一个好方法来使用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 
相关问题