如何从 API 的重复承诺中获取值?

How do I get the values from a repeating promise from an API?

我正在对一项服务进行 API 调用,该服务在完成之前一直给我结果。因此,当我在我的代码中 运行 this 时,它将列出每个项目,因为它被推入数组

   const faxList = [];
   client.fax.faxes.each((faxes) => {
     faxList.push(faxes);
     console.log(faxList);
   });

输出:

[ '0' ]
[ '0',  '1' ]
[ '0',  '1',  '2' ]
[ '0',  '1',  '2',  '3' ]

如何等待该循环完成,然后 return 完成数组?目标是让 faxList 作为我可以使用的可用变量。例如通过快递发送。我试过 async/await 但在完成之前只输出第一个结果。使用 then/catch 的结果相同。任何帮助将不胜感激。

对于您使用 twilio 客户端的具体问题,您可以改用 .list 方法。它将 return 一个解析记录数组的承诺:

client.fax.faxes.list().then(faxes => console.log(faxes));

更通用的方法要求 API 至少提供

  • 获取每个值的方法
  • 一种在获取所有值时收到通知的方法(即 API 已“完成”)

在下面的示例中,我们假设 API 会触发两个事件,当值可用时 data 和所有值都已获取时 done

围绕此 API 调用 "wrap" Promise 的一般方法。我们收集数组中的值并在 API 完成时解决承诺。

function fetchData() {
  return new Promise((resolve, reject) => {
    const values = [];

    someAPI.fetch({
      data: value => values.push(value),
      done: () => resolve(value),
      error: error => reject(error),
    });

  });
}

// Then used as
fetchData().then(values => console.log(values));

同样,如何具体执行此操作取决于相关 API 的工作方式。