当使用 forEach
循环异步操作时,很容易遇到异步操作不按照我们期望的方式工作的情况。这是由于 forEach
无法处理异步操作的返回值或者 Promise,在这种情况下,使用 for...of
循环或者 Promise.all
可能是更好的选择。不过,如果你真的需要使用 forEach
并且希望异步操作顺利工作,有一些调整你可以尝试。
下面是一些在 forEach
循环中使用异步操作的提示:
- 为循环中的每次操作返回 Promise,以确保在完成操作后立即处理已完成的状态。这可以通过将要执行的操作包装在一个自包含的 Promise 中实现。
const arr = [1, 2, 3];
const asyncOperation = async (item) => {
// 异步操作
};
(async () => {
// 使用`for...of`,为每个异步操作返回Promise并处理它们
for (const item of arr) {
await new Promise(resolve => {
asyncOperation(item)
.then(resolve)
.catch(e => console.log(e));
});
}
console.log('done');
})();
- 使用
map
和Promise.all
将每个异步操作的结果存储在一个数组中并在循环结束后使用await
等待它们被解决。
const arr = [1, 2, 3];
const asyncOperation = async (item) => {
// 异步操作
};
(async () => {
// 将每个异步操作的结果存储在一个数组中
const asyncOperations = arr.map(item => asyncOperation(item));
// 等待所有异步操作完成,使用`await`等待所有Promise解决
await Promise.all(asyncOperations);
console.log('done');
})();
总之,为了在使用 forEach
循环时使异步操作按照我们的期望工作,我们需要为每个异步操作返回 Promise,以确保在完成操作后立即处理已完成的状态。或者,我们可以使用 map
和 Promise.all
,将每个异步操作的结果存储在一个数组中,并在循环结束后使用 await
等待它们被解决。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决await在forEach中不起作用的问题 - Python技术站