gpt4 book ai didi

javascript - 使用 await new Promise() 时 for 循环后的代码不执行

转载 作者:行者123 更新时间:2023-11-30 19:50:53 25 4
gpt4 key购买 nike

我有一个异步函数,我有一个循环:

let z;
let step = 100;
for(z=0; z < (combinedData.length-1)/step; z += 1){
// FURTHER CODE
}

在循环里面我有这样的代码:

let z;
let step = 100;
for(z=0; z < (combinedData.length-1)/step; z += 1){
await new Promise((rs,rj)=>{
setTimeout(()=>{
for(let x = 0; x < step; x++){
let a = combinedData; // Array of 2522 elements
let i = z*step + x;
if(!(i < a.length))
return;
// LONG CODE TO EXECUTE NOT PASTING BECAUSE IRRELEVANT I THINK
}
rs();
});
});
console.log(`Showed ${z}`);
}
console.log('end');

当我运行它时,结果是:

Showed 1
Showed 2
...
Showed 24

除了不显示'end',一切正常。我检查了一下,没有错误

//LONG CODE TO EXECUTE NOT PASTING BECAUSE IRRELEVANT

部分所以不用担心。

我想,那个错误在某处

if(!(i<a.length))return;

但我不知道在哪里以及为什么。这个声明很重要不要搞定TypeError 因为访问 a[i]

最佳答案

循环后的代码没有执行,因为你没有解析或拒绝你创建的 Promise .

你说得对,这个 if(!(i<a.length))return;导致问题,因为使用返回语句,您取消了 setTimeout 中函数的进一步执行,但你没有兑现你的 promise 。所以 await 函数会永远等待。

要简单地解决您的问题,您可以执行以下操作:

if(!(i<a.length)){
return rs(); // Returns and resolves your created promise
}

关于javascript - 使用 await new Promise() 时 for 循环后的代码不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54486319/

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