如何正确调用/管理我的observable的后续订阅?

时间:2017-09-01 20:40:21

标签: javascript rxjs rxjs5

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

1 个答案:

答案 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