gpt4 book ai didi

javascript - 如何在for循环中顺序调用JavaScript函数?

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:10 24 4
gpt4 key购买 nike

我想将每个项目传递到一个需要时间的函数中。但似乎JS功能是异步的。如何顺序调用该函数? (在上一项完成后将下一项传递给函数)

function main() {
for (var i = 0; i < n ; i++) {
doSomething(myArray[i]);
}
}

function doSomething(item) {
// do something take time
}

我的解决方案是递归调用该函数。但我想知道是否有不同的方法来解决这个问题?谢谢。

function main() {
doSomething(myArray, 0);
}

function doSomething(item, i) {
// do something take time
doSomething(myArray, i + 1);
}

最佳答案

在 JavaScript 中,截至 2020 年,for 循环是异步/等待感知的。您可以返回一个 Promise,然后在 for 循环内await 该 Promise。这会导致循环连续执行,即使对于长时间运行的操作也是如此。

function randomSleep(ms, seed=10) {
ms = ms * Math.random() * seed;
return new Promise((resolve, reject)=>setTimeout(resolve, ms));
}
async function doSomething(idx) {
// long running operations
const outcome = await randomSleep(500);
return idx;
}
const arrItems = ['a','b','c','d'];
for(let i=0,len=arrItems.length;i<len;i++) {
const result = await doSomething(i);
console.log("result is", result)
}

在此处了解有关 for 循环和 forEach 循环中的 async wait 的更多信息 https://zellwk.com/blog/async-await-in-loops/

关于javascript - 如何在for循环中顺序调用JavaScript函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38236637/

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