JavaScript 如何使用async/await与forEach循环
异步 现在很流行,因为它提供了允许多个任务同时执行(同时执行)的功能,这有助于提高代码的生产力和效率。
async/await 用于编写异步代码。在JavaScript中,我们使用循环技术通过forEach循环遍历数组。
在forEach循环中使用async/await:
方法:
- 创建一个包含一些值的数组,例如 myArray 。
- 创建一个异步主函数调用另一个异步函数 doSomethingAsync
- 现在创建一个异步函数,在其中使用 setTimeout 打印数组的所有项。
- 该函数返回一个在延迟完成时解析的Promise对象。
Javascript代码:
<script>
const myArray = [1, 2, 3, 4, 5];
// A function that returns a promise
// that resolves after a random delay
async function doSomethingAsync(item) {
return new Promise(resolve => {
setTimeout(() => {
console.log(item);
resolve();
}, Math.random() * 1000);
});
}
async function main() {
// Wait for all promises returned by
//doSomethingAsync to resolve.
await Promise.all(
// Use map to create an array of promises,
// with one promise for each item in myArray.
myArray.map(async item => {
// Wait for the promise returned by
//doSomethingAsync to resolve.
await doSomethingAsync(item);
})
);
}
// Call main to start the program.
main();
</script>
工作:
- 主要功能被标记为async,这意味着它返回一个promise。
- 我们使用Promise.all来等待所有由doSomethingAsync返回的promise完成,然后再继续执行下一行代码。
- 在Promise.all中,我们使用map来创建一个promise的数组,每个promise都调用doSomethingAsync来处理数组中的一个单独项。
- 我们使用await关键字来等待每个promise完成,然后再继续处理数组中的下一个项。
输出:
另一个例子:
JavaScript
<script>
const myArray = ["geeks", "for", "geeks"];
// A function that returns a promise
//that resolves after a random delay
async function doSomethingAsync(item) {
return new Promise(resolve => {
setTimeout(() => {
console.log(item);
resolve();
}, Math.random() * 1000);
});
}
async function main() {
// Wait for all promises returned
// by doSomethingAsync to resolve
await Promise.all(
// Use map to create an array of promises,
// with one promise for each item in myArray
myArray.map(async item => {
// Wait for the promise returned by
// doSomethingAsync to resolve
await doSomethingAsync(item);
})
);
}
// Call main to start the program.
main();
</script>
输出:
解释: 由于打印元素的延迟,为了节省时间,在myArray中将先打印另一个元素” for “,然后才是第一个元素” geeks “。这说明异步函数同时运行。