在Array.map()调用中使用async/await时,需要注意的是,async/await只能在Promise函数中使用。在Array.map()中使用async/await会导致返回的是一个包含Promise的数组,而不是解析后的元素数组。
解决方法是使用Promise.all()来等待所有的Promise完成,并返回解析后的元素数组。下面是一个示例代码:
const array = [1, 2, 3];
const asyncFunction = async (num) => {
// 模拟异步操作
return new Promise((resolve) => {
setTimeout(() => {
resolve(num * 2);
}, 1000);
});
};
const resolveArray = async (arr) => {
const promises = arr.map(async (num) => {
const result = await asyncFunction(num);
return result;
});
const resolvedArray = await Promise.all(promises);
return resolvedArray;
};
resolveArray(array)
.then((result) => {
console.log(result);
})
.catch((error) => {
console.error(error);
});
在上面的示例中,我们定义了一个asyncFunction,它会返回一个Promise,模拟一个异步操作。然后我们定义了resolveArray函数,它接受一个数组,并使用Array.map()来调用asyncFunction。在每个映射函数中,我们使用await等待异步操作完成,并返回结果。
在resolveArray函数中,我们使用Promise.all()等待所有的Promise完成,并返回解析后的元素数组。
最后,我们调用resolveArray函数,并在返回的Promise上使用.then()来处理解析后的数组,或使用.catch()来处理错误。
运行上面的示例代码,将会输出解析后的数组:[2, 4, 6]。
下一篇:不是所有重复行都被删除