尝试创建一个可以推送给所有订阅者的可观察对象,但是我遇到了多个订阅的问题。据我所知,订阅管理是我自动处理的。在下面的示例中,我的目标是同时记录“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 :(得分: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