我在 previous question 中犯了一个错误,导致受访者无法理解我的意思。所以我又问了一个新问题。
我需要在循环中处理多个异步操作。这些异步操作我使用await让它们串行执行。我想要的结果是循环是并行的,每个循环中的异步操作串行运行,但结果都是串起来的。这种情况如何解决?
在每个循环中,我使用 await 来处理 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
我想要的是:同时输出3次123,每次123串行,总共30秒。
最佳答案
您的代码已经具有预期的行为。您声称执行需要 90 秒,但您提供的代码只需要 30 秒。这是您的代码的复制品,所有延迟都减少了 10 倍以加快速度。因此,这将等待一秒,记录 111,然后等待一秒,记录 222,然后等待一秒,记录 333。总时间,3 秒(如果我完成完整的持续时间,则相当于 30 秒)
const delay = (duration) => new Promise(resolve => setTimeout(resolve, duration));
const func1 = () => delay(1000).then(() => console.log(1));
const func2 = () => delay(1000).then(() => console.log(2));
const func3 = () => delay(1000).then(() => console.log(3));
const test = async () => {
await func1();
await func2();
await func3();
}
for(let i = 0; i < 3; ++i){
test();
}
关于javascript - 如果想实现:Parallel between loops,多个异步操作在循环中串行运行,代码该怎么写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58677033/