循环之间并行,循环中有多个异步操作,如何实现?

945

我需要在一个循环中处理多个异步操作。我使用这些异步操作来等待它们串行执行。我想要的结果是循环是串行的,每个循环中的异步操作是并行的,但是结果全都被串了起来。如何解决这种情况?

对不起,我英语不好。我通过谷歌翻译。

在每个循环中,我使用await来处理Promise,该Promise具有异步操作。但是它们都是串行的。

我的代码是这样的:

var func1 = function(){return new Promise(function(resolve, reject){
    //After 10s print(1);
    loadRes("resname_1", 
        (res)=>{print(1); resolve(res);},
        (err)=>{reject(err);});
 })}

 var func2 = function(){return new Promise(function(resolve, reject){
    //After 10s print(2); 
    //some async operation like above
 })}

 var func3 = function(){return new Promise(function(resolve, reject){
    //After 10s print(3); 
    //some async operation like above
 })}


 var test = async function(){
    //some code...;
    await func1;

    //some code...;
    await func2;
    await func3;
 }

 for(let i = 0; i < 3; ++i){
    test();
 }

我得到的结果:111222333,总秒数:90

我想要的是:123 123 123,总秒数:大约30

贝吉

您似乎正在寻找一致启动异步操作,然后让它们并发运行,同时等待的过程Promise.all然后await循环的每次迭代:

 for (let i = 0; i < 3; ++i){
     //some code...;
     const [a,b,c] = await Promise.all([
         func1(),
         func2(),
         func3(),
     ]);
     console.log(a+b+c); // to ensure the expected order
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章