Я пытаюсь реализовать шаблон, в котором я хочу отправить событие всем подписчикам одного наблюдателя, а затем дождаться ответа всех подписчиков.Таким образом, «A» испускает «1», «2» и «3» (которые все подписаны на него), а затем обрабатывает результаты, как только «1», «2» и «3» ответили.Список подписчиков является динамическим (т.е. я не знаю их количество), но как только он будет добавлен, он не будет удален
Естественно, вторая половина этого трудная часть, и я нене знаю, как это реализовать.Единственное, что я мог придумать, - это чтобы каждый подписчик отправлял своего собственного субъекта в основной сервис 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);
}
});
}