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

无法聚合Twilio API返回的账单数据 async/await调用未生效问题

问题原因
  1. 你调用getBillingData后没有等待异步逻辑执行完成就打印result.length,此时Twilio API请求还未返回,数组还没被赋值,所以长度为0。
  2. 你将async关键字写在了each方法的回调参数中,只能控制单条记录的处理逻辑,无法让外层代码感知到全部遍历操作已完成。
  3. 手动维护外部的result变量收集结果容易出现时序问题,Twilio官方提供了更简单的全量查询方法。
修复代码(推荐写法)

直接用list方法获取全量匹配记录,不需要手动遍历:

const twilio = require("twilio");

const client = twilio(
  "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "AUTHXXXXXXXXXXXXXXXXXXXXXXXXXXX"
);

const filterOpts = {
  startDate: "2021-08-01",
  endDate: "2021-08-31",
};

async function getBillingData() {
  // list方法返回Promise,resolve后就是所有符合条件的记录数组
  return await client.usage.records.list(filterOpts);
}

// 必须等待异步操作完成后再操作结果
async function main() {
  const result = await getBillingData();
  console.log(result.length);
  // 你的Web应用接口逻辑可以在这里把result返回给前端
}

main();
如果你一定要用each方法的写法

可以用Promise包裹整个遍历过程,在遍历完成的回调中resolve结果:

const twilio = require("twilio");

const client = twilio(
  "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "AUTHXXXXXXXXXXXXXXXXXXXXXXXXXXX"
);

const filterOpts = {
  startDate: "2021-08-01",
  endDate: "2021-08-31",
};

function getBillingData() {
  return new Promise((resolve) => {
    const result = [];
    // each方法第三个参数为全部遍历完成后的回调
    client.usage.records.each(filterOpts, (record) => {
      result.push(record);
    }, () => {
      resolve(result);
    });
  })
}

async function main() {
  const result = await getBillingData();
  console.log(result.length);
}

main();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:48:03