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})