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