Javascript 并行处理承诺
我有一个来自客户端服务的套接字连接,并接收一组数据。 基于数组中的每个元素,我将创建查询并发送到数据库。 如何异步解决此问题Javascript 并行处理承诺,javascript,promise,rxjs,Javascript,Promise,Rxjs,我有一个来自客户端服务的套接字连接,并接收一组数据。 基于数组中的每个元素,我将创建查询并发送到数据库。 如何异步解决此问题 Promise.all([p1, p2, p3, ...) promise all对我没有用处,因为我需要在解决任何问题后发出事件 每次这些承诺得到解决,我都应该做些工作 因此,我想知道是否有任何方法可以根据每个承诺接收事件?您可以简单地在承诺数组上循环并附加一个。然后将处理程序附加到所有承诺,如下所示 const promises=[p1,p2,p3,…] for(c
Promise.all([p1, p2, p3, ...)
promise all对我没有用处,因为我需要在解决任何问题后发出事件
每次这些承诺得到解决,我都应该做些工作
因此,我想知道是否有任何方法可以根据每个承诺接收事件?您可以简单地在承诺数组上循环并附加一个
。然后将处理程序附加到所有承诺,如下所示
const promises=[p1,p2,p3,…]
for(const promise of promises){
然后(()=>console.log('done');
}
如果需要:
然后并行运行
当每一个承诺完成时,做点什么
知道他们什么时候都完成了
您可以这样做:
Promise.all([
p1.then(result => { /* do something when p1 is done; return result; */}),
p2.then(result => { /* do something when p2 is done; return result; */}),
p3.then(result => { /* do something when p3 is done; return result; */}),
]).then(allResults => {
console.log("all promises done");
}).catch(err => {
console.log(err);
});
如果您想知道所有这些都是什么时候完成的,即使其中一些有错误:
Promise.allSettled([
p1.then(result => { /* do something when p1 is done; return result; */}),
p2.then(result => { /* do something when p2 is done; return result; */}),
p3.then(result => { /* do something when p3 is done; return result; */}),
]).then(settledResults => {
console.log("all promises done");
});
现在,通常情况下,p1
、p2
和p3
都不在像这样的单独变量中。通常,您只需直接进行如下函数调用:
Promise.all([
fn1(arg1).then(result => { /* do something when fn1 is done; return result; */}),
fn2(arg2).then(result => { /* do something when fn2 is done; return result; */}),
fn3(arg3).then(result => { /* do something when fn3 is done; return result; */}),
]).then(allResults => {
console.log("all promises done");
}).catch(err => {
console.log(err);
});
rxjs解决方案是使用merge
merge(from(p1),from(p2),from(p3))
.subscribe(()=>{.. will execute when any one of promise complete})