在使用array.map()
方法时,如果map函数内部使用了async/await
,它不会直接返回一个包含所有结果的数组给父级array.map()
,而是返回一个由Promise对象组成的数组。这是因为async/await
会返回一个Promise对象,而不是直接返回结果。
解决这个问题的方法是,在array.map()
之后使用Promise.all()
来等待所有的异步操作完成,并将结果返回给父级array.map()
。下面是一个示例代码:
const array = [1, 2, 3, 4, 5];
const asyncFunction = async (num) => {
// 模拟一个异步操作,这里使用setTimeout来延迟一秒钟
await new Promise(resolve => setTimeout(resolve, 1000));
return num * 2;
};
const asyncMap = async () => {
// 使用Promise.all()等待所有异步操作完成,并将结果返回给父级array.map()
const results = await Promise.all(array.map(async (num) => {
return await asyncFunction(num);
}));
console.log(results);
};
asyncMap();
在上面的示例中,asyncFunction
模拟了一个异步操作,对传入的数字进行乘以2的操作。asyncMap
函数使用array.map()
来对数组中的每个元素调用asyncFunction
,并使用Promise.all()
等待所有异步操作完成。最后,将所有结果打印到控制台。
注意,使用async/await
时要确保在适当的地方使用await
关键字,以等待异步操作完成。
上一篇:Async/Await不等待?