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

时间:2018-06-22 22:19:58

标签: javascript node.js twilio twilio-api

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

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

输出:

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

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

1 个答案:

答案 0 :(得分:1)

对于twilio客户端的特定问题,可以改用.list方法。它将返回一个可解决记录数组的promise:

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

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

  • 获取每个值的方法
  • 在获取所有值(即API已完成)时通知的方法

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

围绕此API调用“包装” 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的工作方式。