考虑以下代码
getObservable() {
return this.http.get('get_something').map(
data => {
return true;
},
err => {
return false;
}
);
}
subscriber_1 = this.getObservable().subscribe(
data => {
console.log("from subscriber 1", data);
}
);
subscriber_2 = this.getObservable().subscribe(
data => {
console.log("from subsriber 2", data);
}
);
for (var _i = 0; _i < 100; _i++) {
this.getObservable()
}
我希望from subscriber 1
和from subsriber 2
能够打印100
次。但是只打印1
时间。
我认为observable是向量而不是标量,所以无论何时调用相同的observable都会调用所有订阅者?
我一定是做错了。
有人可以帮忙吗?
由于
答案 0 :(得分:1)
以下是您的工作:
subscriber_1
正在发出请求,当您调用订阅函数时,只等待当前请求才能收到响应。据我所知,您希望使用RxJS中的Subject
。
let subject: Subject<any> = new Subject<any>();
// Anytime the subject value is changed a notification is triggered
// The subscribe function is handling it
let subscriber_1 = subject.AsObservable().subcribe((data) => {
console.log(data);
return data;
})
// Trigger a notification 100 times
for(let i = 0; i < 100; i++) {
subject.next(i);
}
以下是一篇很好的文章,您可以在其中详细了解Subject
课程https://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93
或者
如果您不想使用RxJS,则必须实现可观察的模式。
http://www.dofactory.com/javascript/observer-design-pattern以下是一个很好的解释。