我正在尝试实现一种模式,在该模式下,我想向所有单个观察者的订阅者发出事件,然后等待所有订阅者做出响应。因此,“ A”发出“ 1”,“ 2”和“ 3”(都已订阅),然后在“ 1”,“ 2”和“ 3”都响应后处理结果。订阅者列表是动态的(即我不知道他们的数量),但是一旦添加,它就不会被删除
自然地,这的后半部分是困难的部分,我不知道如何实现它。我唯一能想到的就是让每个订阅者将自己的Subject发送给主要的Observable服务,并使用zip,但我更喜欢一个更好的解决方案。
我的解决方案(在伪AngularJS中):
Main.js:
function() {
var subscribers = [];
var subjectPublishingFromMain = new RxJs.Subject();
var publishToMain = function(subject) {
subscribers.push(subject);
};
var publishToAllAndDealWithResponse = function() {
subjectPublishingFromMain.next(giveMeData);
zip(subscribers).subscribe(
function(allTheData) {
//Deal with all the subscriber data
});
};
return {
subjectPublishingFromMain: subjectPublishingFromMain,
publishToMain: publishToMain
};
}
Subscriber1.js
function(main) {
var mySubject = new RxJs.Subject();
var toMain = new RxJS.Subject();
main.subjectPublishingFromMain.subscribe(
function(fromMain) {
if(fromMain.type === 'INITIAL') {
main.publishToMain(mySubject);
}
else() {
mySubject.next(myData);
}
});
}