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

如何等待对象异步编辑完成后再执行接口响应返回操作

核心问题

你在map中传入async函数时,每次迭代都会返回一个独立的Promise对象,最终得到的newResult是Promise数组,本身不会自动等待所有异步任务执行完成,所以响应逻辑会提前执行。你需要用Promise.all等待数组内所有异步任务执行完毕后,再执行返回响应的逻辑。

调整后代码

const getCart = async () => {
  
  // ...原有逻辑

  // 先判断物理商品数组是否存在
  const physicalItems = result.data?.line_items.physical_items
  if (physicalItems) {
    // 等待所有商品的最小库存查询完成
    await Promise.all(
      physicalItems.map(async (item: any) => {
        item.order_quantity_minimum = await getProductMinQuantity(item.product_id)
      })
    )
  }

  // 所有异步修改完成后再返回响应
  res.status(200).json({
    data: result.data ? normalizeCart(result.data) : null,
  })
}

补充说明

  • 如果需要兼容getProductMinQuantity调用失败的场景,不想因为单个接口报错导致整个购物车接口失败,可以把Promise.all替换为Promise.allSettled,之后遍历结果自行处理成功/失败的情况。
  • 上述代码直接修改了原item对象,如果你需要避免修改原数据,可以在map中返回新的对象,等所有异步完成后再组装到result.data中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:24:03