rxjs - 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);
}
});
}
解决方案
推荐阅读
- node.js - 从 URL 获取图像到 S3
- python - 使用 QStyledItemDelegates 作为 QListView 中的自定义项
- javascript - 谷歌地图 - 更改不同缩放级别上的所有标记大小 - map.data.setStyle
- phaser-framework - 从另一个身体的墙壁上弹起一个身体。Phaser3
- javascript - 使用正则表达式或替代方法检查字符串的第一个字符是否为数字或空格
- forms - 复选框在所有记录而不是选定记录上触发
- java - 在 Spring 中消耗大量 json 有效负载的最佳方法是什么?
- javascript - 轴未显示域中的第一个元素
- git - Git 与 Jenkins 的集成
- javascript - 如何在laravel中使用ajax删除图像