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

如何用Promise等待多API请求结果后执行依赖函数(附代码)

用Promise.all优雅解决多异步请求等待问题

嘿,这个场景刚好是Promise.all的拿手好戏!你现在用的是回调式的API调用,咱们只需要把这两个请求转换成Promise,就能完美实现“等两个请求都返回再执行依赖函数”的需求,完全不需要setTimeout这种hack写法~

第一步:把回调式的API包装成Promise

首先,咱们把每个JA.get请求都包装成返回Promise的函数,这样就能利用Promise的异步管理能力了:

// 包装获取发票的请求
function getInvoices(companyId) {
  return new Promise((resolve, reject) => {
    JA.get(`api/${companyId}/Invoicing`, (err, data) => {
      if (err) {
        reject(err); // 请求失败时抛出错误
        return;
      }
      resolve(data); // 请求成功时返回数据
    });
  });
}

// 包装获取费用的请求
function getExpenses(companyId) {
  return new Promise((resolve, reject) => {
    // 这里替换成你实际的费用API路径
    JA.get(`api/${companyId}/Expenses`, (err, data) => {
      if (err) {
        reject(err);
        return;
      }
      resolve(data);
    });
  });
}

第二步:用Promise.all等待所有请求完成

接下来,用Promise.all来同时发起两个请求,它会等待所有Promise都成功resolve后,才会进入.then回调;如果其中任何一个请求失败(reject),会直接进入.catch处理错误:

// 假设你已经有companyId变量
const companyId = "你的公司ID";

// 同时发起两个请求,等待全部完成
Promise.all([getInvoices(companyId), getExpenses(companyId)])
  .then(([invoicesData, expensesData]) => {
    // 这里两个请求的数据都已经拿到啦!
    var invoices = invoicesData;
    var expenses = expensesData;
    var invoicesTotal = 0;
    var expensesTotal = 0;

    // 这里写你计算total的逻辑,比如:
    invoicesTotal = invoices.reduce((sum, item) => sum + item.amount, 0);
    expensesTotal = expenses.reduce((sum, item) => sum + item.amount, 0);

    // 现在执行你的依赖函数!
    yourDependencyFunction(invoicesTotal, expensesTotal);
  })
  .catch((error) => {
    // 处理任何一个请求失败的情况
    console.error("请求出错了:", error);
  });

关键说明:

  • Promise.all([p1, p2])会接收一个Promise数组,只有当p1和p2都成功时,才会把两个请求的结果按顺序放到.then的数组参数里(也就是[invoicesData, expensesData])。
  • 完全不需要setTimeout,因为Promise内部已经帮你处理了异步等待的逻辑,比定时器靠谱多了——定时器没法准确判断请求到底什么时候完成,而Promise是基于实际的请求状态的。
  • 别忘了加上.catch处理错误,避免某个请求失败导致整个流程卡住。

内容的提问来源于stack exchange,提问作者nick.cook

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:36:09