首页 > 解决方案 > RxJS - 一位观察者等待多个事件

问题描述

我正在尝试实现一种模式,我想向所有单个观察者的订阅者发出事件,然后等到所有订阅者都响应。所以“A”向“1”、“2”和“3”(都订阅了它)发出,然后在“1”、“2”和“3”都响应后处理结果。订阅者列表是动态的(即我不知道他们的数量),但是一旦添加它就不会被删除

自然,这后半部分是困难的部分,我不知道如何实现。我唯一能想到的就是让每个订阅者将自己的 Subject 发送到主要的 Observable 服务,并使用 zip,但我更喜欢更好的解决方案。

我的解决方案(在伪 AngularJS 中):

主.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
    };
}

订阅者1.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);
        }
    });
}

标签: rxjs

解决方案


推荐阅读