【发布时间】:2020-07-30 12:21:10
【问题描述】:
所以我希望循环内的代码同时运行,但循环后的代码仅在循环完成处理时运行:
代码
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
const waitFor = (ms, num) => new Promise(r => setTimeout(() => {
console.log(num)
r()
}, ms));
const doStuff = async() => {
await asyncForEach([1, 2, 3], async(num) => {
await waitFor(1000, num);
})
console.log('Done');
}
doStuff()
输出
/* Output
1 - takes 1 sec
2 - takes 1 sec
3 - takes 1 sec
Done
- total 3 sec
*/
我想要什么
/* What I want
_
1 |
2 | - takes 1 sec
3 _|
Done
- total 1 sec
*/
【问题讨论】:
-
请不要通过输入无关字符来绕过网站规则,以便您的标题是一个与另一个不同的字符。相反,请阅读 How to Ask 并想出一个更好的标题,更独特地描述您的特定问题,或者更好的是,阅读其他问题,看看您的问题之前是否有人问过。
-
Javascript 是
single-threaded language。这意味着它有一个调用栈和一个内存堆。你无法在 JS 中实现你想要的。每个函数都在事件循环中被一一调用。 -
@HereticMonkey 我让标题更具描述性,作为他们将来使用的示例。
标签: javascript node.js asynchronous async-await