为何向Promise.all传入异步函数数组可正常工作?代码执行疑问解析
为什么向Promise.all传入异步函数数组能按预期工作?
先看你的代码:
await Promise.all( arr_tar.map(async (tar) => { return { n: await tar_get_one(tar), name: tar.name, }; }) )
你有个关键误解:Promise.all接收的不是异步函数数组,而是一堆Promise实例,原因如下:
arr_tar.map(...)执行时,会遍历arr_tar里的每个tar元素,立即调用你传入的async (tar) => {...}异步函数。- 所有
async函数被调用后,会立刻返回一个Promise对象,同时函数内部的代码(包括await tar_get_one(tar)这个异步操作)会启动执行。 - 最终
map返回的数组,就是这些Promise实例的集合,Promise.all会等待所有Promise都完成,再把它们的结果汇总成数组返回。
举个直白的例子辅助理解:
const nums = [1, 2, 3]; // map会逐个调用异步函数,返回Promise数组 const promiseList = nums.map(async num => { // 模拟异步操作 await new Promise(resolve => setTimeout(resolve, 100)); return num * 2; }); // promiseList的类型是Promise<number>[],不是函数数组 const result = await Promise.all(promiseList); console.log(result); // 输出 [2, 4, 6]
简单说,map帮你主动调用了所有异步函数,把它们转换成了Promise,Promise.all只负责等待这些Promise全部完成而已。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

