Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果要实现:在循环之间并行,多个异步操作在循环中串行运行,如何编写代码?_Javascript_Node.js - Fatal编程技术网

Javascript 如果要实现:在循环之间并行,多个异步操作在循环中串行运行,如何编写代码?

Javascript 如果要实现:在循环之间并行,多个异步操作在循环中串行运行,如何编写代码?,javascript,node.js,Javascript,Node.js,我在报告中犯了一个错误,导致被调查者无法理解我的意思。所以我又问了一个新问题 我需要在一个循环中处理多个异步操作。我使用的这些异步操作等待让它们串行执行。我想要的结果是循环是并行的,每个循环中的异步操作都是串行运行的,但结果都是串起来的。如何解决这种情况 在每个循环中,我使用wait来处理Promise,它具有异步操作,但都是串行的 我的代码如下: var func1 = function(){return new Promise(function(resolve, reject){ /

我在报告中犯了一个错误,导致被调查者无法理解我的意思。所以我又问了一个新问题

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

在每个循环中,我使用wait来处理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();
 }
var func1=function(){返回新承诺(函数(解析、拒绝){
//10秒后打印(1);
loadRes(“resname_1”,
(res)=>{print(1);resolve(res);},
(err)=>{拒绝(err);};
})}
var func2=function(){返回新承诺(函数(解析、拒绝){
//10秒后打印(2);
//一些类似上面的异步操作
})}
var func3=function(){返回新承诺(函数(解析、拒绝){
//10秒后打印(3);
//一些类似上面的异步操作
})}
var test=异步函数(){
//一些代码。。。;
等待功能1;
//一些代码。。。;
等待功能2;
等待功能3;
}
for(设i=0;i<3;++i){
test();
}
我得到的结果是:111222333,总秒数:90


我想要的是:同时输出123三次,每个123都是串行的,总共30秒。

您的代码已经有了预期的行为。您声称执行需要90秒,但您提供的代码只需要30秒。这是你的代码的复制品,所有的延迟都减少了10倍以加快速度。所以这将等待一秒钟,日志111,然后等待一秒钟,日志222,然后等待一秒钟,日志333。总时间,3秒(如果我完成了整个持续时间,则相当于30秒)

constdelay=(持续时间)=>newpromise(解析=>setTimeout(解析,持续时间));
const func1=()=>delay(1000)。然后(()=>console.log(1));
constfunc2=()=>delay(1000)。然后(()=>console.log(2));
constfunc3=()=>delay(1000)。然后(()=>console.log(3));
常量测试=异步()=>{
等待函数1();
等待函数2();
等待函数3();
}
for(设i=0;i<3;++i){
test();

}
我猜预期的行为是打印出来:
(10s)1=>(10s)2=>(10s)3=>(10s)1=>(10s)2=>(10s)3=>(10s)1=>(10s)2=>(10s)3
<代码>123123
在90秒内,对吗

如果是,则问题来自循环:

 for(let i = 0; i < 3; ++i){
    test();
 }
完整示例:

const sleep=ms=>{
返回新承诺(解决=>
设置超时(解析,毫秒)
);
}
常量func1=函数(){
//10秒后打印(1);
返回sleep(10000);
} 
常量func2=函数(){
//10秒后打印(2);
返回sleep(10000);
} 
常量func3=函数(){
//10秒后打印(3);
返回sleep(10000);
} 
常量测试=异步函数(){
等待函数1();
等待函数2();
等待函数3();
}
常量forLoop=async\ux=>{
for(设i=0;i<3;++i){
等待测试();
}
}

forLoop()我的意思是否正确:你想让10秒过去,然后“123”或多或少立即打印,然后再多10秒,然后是“123”,再多10秒,然后是“123”?这不是我的意思。像这样:(10s)1=>(10s)2=>(10s)3,同时重复三次times@Nicholas塔
同时重复三次
这是否意味着您希望它等待10秒,然后获得“111”,然后再等待10秒,然后获得“222”,然后再等待10秒,然后获得“333”?感谢您的澄清,但在这种情况下,您的代码似乎已经具有预期的行为。请看我的答案,看看我是否在将代码调整为可运行的代码段时出错。在我的实际代码中,我的func3是从网络下载图像的操作。下载完成后,屏幕会刷新,但我的表现是,所有图像在刷新之前都会下载(等待时间很长,这对用户来说是一种糟糕的体验)。非常感谢,我会检查我的代码。Nicholas Tower说的是对的。但我的代码并没有按预期执行。实际上,执行起来就像我回答他的那样,可能我的代码有一些逻辑问题,我会检查它。非常感谢!
const forLoop = async _ => {
   for(let i = 0; i < 3; ++i){
      await test();
   }
}