我该如何等到RxJS中的所有承诺都实现
How do I wait until all the Promises are fulfilled in RxJS?
我有一个Promises列表,我想得到结果并显示在页面上。
let directives = ['object-src', 'img-src', 'media-src', 'script-src', 'style-src', 'frame-src', 'child-src'];
let directivesStream = Rx.Observable.from(directives)
.map((d) => {
let q = getSummaryCSP({
origin: origin,
directive: d,
from: moment().subtract(3, 'days').utc().format(),
to: moment().utc().format()
});
return Rx.Observable.interval(10000)
.flatMap(() => Rx.Observable.fromPromise(queries.query(q)));
});
directivesStream.mergeAll().subscribe((response) => {
let flattenedRes = _.sortBy(response.data, (e) => e.event.count);
flattenedRes = _.reverse(flattenedRes);
this.setState({
cspReport: flattenedRes
});
});
所以它所做的是创建一个间隔为10000
的Promises流。然而,最终结果是所有承诺的组合结果,这就是为什么我要执行sorting
和reversing
,然后在React中显示结果。
我知道RxJs中的所有内容都是一条流。所以,我不确定我是否能做到这一点?
所以,我的问题是,我如何创建一个Promises流,在10秒结束时,所有流都必须合并为一个流,这样我才能使用所有Promises的结果。
不确定我是否能很好地理解你的问题,但这里有一些建议供你研究:
toArray
操作符:允许将一个流的所有发射收集到一个数组中forkJoin
运算符:相当于Promise.all
,并行运行所有promise并收集所有结果
我相信,有了这两个人中的一个,你就能实现你的目标。我让你弄清楚,尝试自己解决问题是更好地理解Rxjs的最佳方式。此外,您还可以在此处找到运算符列表。我建议你在发布问题之前先看一看。
由于您可以在React中将节点模块导入到客户端代码中,因此我将研究异步节点模块。我相信你想要的执行过程是地图和瀑布的结合。
async.waterfall([
myFirstFunction,
mySecondFunction,
myLastFunction,
], function (err, result) {
// result now equals 'done'
});
function myFirstFunction(callback) {
callback(null, 'one', 'two');
}
function mySecondFunction(arg1, arg2, callback) {
// arg1 now equals 'one' and arg2 now equals 'two'
callback(null, 'three');
}
function myLastFunction(arg1, callback) {
// arg1 now equals 'three'
callback(null, 'done');
}
相关文章:
- UserInformation.getFirstNameAsync承诺永远不会实现
- 如何用HTML5地理定位API实现承诺
- 蓝鸟递归承诺未得到解决/实现
- Fire$ng在承诺实现后动画输入
- 如何实现这种方法与承诺
- 我该如何等到RxJS中的所有承诺都实现
- Javascript承诺:它们能在用户空间代码中完全实现吗
- 在节点中,使用Q,使两个函数并行工作,但只等待第一个函数实现其承诺
- JS承诺在功能内实现
- 承诺在 Ember 框架中使用的实现
- 承诺取消方法.为什么它还没有实现,而不是其他承诺框架
- 承诺.resolve 是否等待传递的承诺实现
- 如何使用承诺实现顺序异步计算
- Javascript/Angularjs :等待承诺实现,然后再进入foreach Loop中的下一次迭代
- 在延迟/承诺实现中使用计时器是一种罪恶
- 嵌套承诺实现顺序执行
- 如何使用承诺实现异步无限循环
- 让javascript函数与回调/承诺实现总是返回一个承诺
- 基本的Javascript承诺实现尝试
- 承诺实现处理程序未定义