如何在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);
额外注意事项
错误处理优化:当前
getTapTransactionsRefunded的catch块只打印错误,会让失败的请求返回undefined。如果你希望捕获并处理单个请求的失败,可以考虑:- 在catch里返回
null或者默认值 - 使用
Promise.allSettled替代Promise.all,这样即使部分请求失败,也能拿到所有结果,再手动过滤成功的项
- 在catch里返回
性能考量:如果
purchases数量很大,同时发起大量API请求可能会触发后端限流。这种情况下可以考虑分批请求,比如用for await...of配合限流逻辑,或者使用第三方库处理并发控制。
内容的提问来源于stack exchange,提问作者syaifulhusein
相关产品推荐
相关产品推荐

