gpt4 book ai didi

javascript - 如果想实现:Parallel between loops,多个异步操作在循环中串行运行,代码该怎么写?

转载 作者:行者123 更新时间:2023-12-02 22:38:09 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com