[英]SyntaxError: Unexpected token "new" when using await new Promise in JavaScript
[英]Code after for loop not executing when using await new Promise()
我有一個異步函數,它有一個循環:
let z;
let step = 100;
for(z=0; z < (combinedData.length-1)/step; z += 1){
// FURTHER CODE
}
在循環中有我 sthis 代碼:
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
除了沒有顯示“結束”之外,一切都是正確的。 我檢查過,沒有錯誤
//LONG CODE TO EXECUTE NOT PASTING BECAUSE IRRELEVANT
部分所以不用擔心。
我認為,這個錯誤存在於
if(!(i<a.length))return;
但我不知道在哪里以及為什么。 這個語句很重要,不要因為訪問a[i]
而得到TypeError
循環之后的代碼不會執行,因為您沒有解析或拒絕創建的Promise
。
你說得對,這個if(!(i<a.length))return;
導致問題,因為使用 return 語句,您取消了setTimeout
內函數的進一步執行,但您沒有解決您的承諾。 所以 await 函數會永遠等待。
要簡單地解決您的問題,您可以執行以下操作:
if(!(i<a.length)){
return rs(); // Returns and resolves your created promise
}
這可以讓您了解如何正確編碼循環:
async function delayedFunc(i, index) {
await new Promise(resolve => setTimeout(resolve, 100));
console.log(i, index);
}
async function main(array) {
for (const [index, item] of array.entries()) {
await delayedFunc(item, index);
}
console.log('Done!');
}
main([1, 2, 3, 4, 5]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.