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

如何在JavaScript的Map函数中解析Promise?

解决Map函数中解析Promise的问题

你看到的{"_40": 0, "_55": null, "_65": 0, "_72": null}其实是未被解析的Promise对象——因为getTapTransactionsRefunded是异步函数,直接在map里调用它会返回Promise实例,而不是你想要的实际API返回值。要解决这个问题,你需要把map生成的Promise数组全部解析,具体步骤如下:

步骤1:让map返回Promise数组

把map的回调函数改成异步函数,这样每个迭代都会返回一个Promise,里面包含你想要的完整对象(此时transactionAmount会是解析后的值):

// 生成包含Promise的数组,处理purchases可能为null/undefined的情况
const purchasePromises = purchases?.map(async (purchase: TapData) => {
  // 等待API调用完成,拿到实际的transactionAmount
  const transactionAmount = await getTapTransactionsRefunded(purchase.logicalTransactionId);
  
  return {
    id: purchase.id,
    logicalTransactionId: purchase.logicalTransactionId,
    logo: "",
    title: purchase.cardAcceptorNameLocation,
    purchaseStatus: purchase.purchaseStatus,
    amount: Number(purchase.authAmount).toFixed(2),
    loanAmount: Number(purchase.loanAmount).toFixed(2),
    outstandingBalance: Number(purchase.outstandingBalance).toFixed(2),
    purchaseDate: purchaseDateToString(purchase.purchaseDate),
    transactionAmount // 现在是实际的数值或null,不再是Promise
  };
}) || [];

步骤2:用Promise.all解析所有Promise

通过Promise.all()等待所有API请求完成,得到最终的purchaseList:

// 这段代码需要放在async函数内部,因为使用了await
const purchaseList = await Promise.all(purchasePromises);

额外注意事项

  1. 错误处理优化:当前getTapTransactionsRefunded的catch块只打印错误,会让失败的请求返回undefined。如果你希望捕获并处理单个请求的失败,可以考虑:

    • 在catch里返回null或者默认值
    • 使用Promise.allSettled替代Promise.all,这样即使部分请求失败,也能拿到所有结果,再手动过滤成功的项
  2. 性能考量:如果purchases数量很大,同时发起大量API请求可能会触发后端限流。这种情况下可以考虑分批请求,比如用for await...of配合限流逻辑,或者使用第三方库处理并发控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:14:05