如何等待对象异步编辑完成后再执行接口响应返回操作
核心问题
你在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
相关产品推荐
相关产品推荐

