You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何得到Promise { <pending> }?JavaScript异步问题咨询

JavaScript异步map返回Pending Promise问题解答

原因分析

async函数的返回值本质就是Promise。你在map中传入的是async回调函数,map会同步遍历数组,把每个回调返回的Promise直接收集到数组里,不会等待这些Promise完成。哪怕你在回调内部用了await,也只是让回调自身等待异步操作结果,但map本身不会暂停等待,所以最终得到的是一组处于pending状态的Promise数组。

解决方案

要获取所有异步操作的最终结果,必须用Promise.all()等待数组中所有Promise完成。示例代码如下:

// 封装在async函数中执行(因为await必须在async函数内使用)
async function fetchSections() {
  // 用Promise.all等待所有异步请求完成
  const foundedSectionsList = await Promise.all(
    sections.map(sectionId => sectionsRepository.getSectionById(sectionId))
  );
  console.log(foundedSectionsList); // 这里输出的是实际的结果数组
}

fetchSections();

补充说明

如果一定要在map的回调里写async/await,写法也可以,但属于冗余操作——因为sectionsRepository.getSectionById(sectionId)本身就返回Promise,直接返回即可,不需要额外用async包裹。冗余写法示例:

async function fetchSections() {
  const foundedSectionsList = await Promise.all(
    sections.map(async (sectionId) => {
      return await sectionsRepository.getSectionById(sectionId);
    })
  );
  console.log(foundedSectionsList);
}

两种写法效果完全一致,但前者更简洁高效。

内容的提问来源于stack exchange,提问作者isadfrn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:35:03