RxJS - Один наблюдатель ожидает нескольких событий - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь реализовать шаблон, в котором я хочу отправить событие всем подписчикам одного наблюдателя, а затем дождаться ответа всех подписчиков.Таким образом, «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);
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...