我正在嘗試從 Twilio API 獲取賬單資料并將回傳值保存在一個變數中,以便我可以回傳它并在我的 Web 應用程式中顯示它。我知道它與異步有關,我嘗試使用異步和等待但無法使其作業。
const twilio = require("twilio");
client = twilio(
"ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"AUTHXXXXXXXXXXXXXXXXXXXXXXXXXXX"
);
const filterOpts = {
startDate: "2021-08-01",
endDate: "2021-08-31",
};
let result = []
function getBillingData() {
client.usage.records.each(filterOpts, async (record) => {
let temp = await record;
result.push(temp);
});
}
getBillingData();
console.log(result.length);
當我嘗試運行它時,它會列印 0
uj5u.com熱心網友回復:
const filterOpts = {
startDate: "2021-08-02",
endDate: "2021-08-02",
callback: (data) => {result.push(data);} ,
done: () => {console.log(result.length);},
};
async function getBillingData() {
client.usage.records.each(filterOpts);
}
async function getData() {
await getBillingData();
};
getData();
我瀏覽了檔案以找到我可以傳遞兩個可選引數來完成我的作業。
uj5u.com熱心網友回復:
Twilio 開發人員布道者在這里。
我認為這個問題是 JS 中異步呼叫的競爭條件,并且您在異步呼叫完成之前回傳代碼。我認為each呼叫也是異步的。嘗試這個:
async function getBillingData() {
let result = []
await client.usage.records.each(filterOpts, async (record) => {
let temp = await record;
result.push(temp);
});
return result;
}
getBillingData().then((result) => {
console.log(result.length);
})
現在該getBillingData函式是一個async函式,因此它可以用于await呼叫client.usage.records.each. 它還收集其results內部并在函式決議時回傳值。
最后,我們使用getBillingData().then()來確保在記錄資料之前收集并回傳資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/345420.html
標籤:javascript 节点.js 异步 承诺 暮光之城
