我正在对服务进行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的结果相同。任何帮助将不胜感激。
答案 0 :(得分:1)
对于twilio客户端的特定问题,可以改用.list
方法。它将返回一个可解决记录数组的promise:
client.fax.faxes.list().then(faxes => console.log(faxes));
更通用的方法要求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的工作方式。