Async 函數Await setTimeout 的組合
在此程式碼片段中,asyncGenerator 函式嘗試利用async-await 功能來處理來自Google API的文件。然而,while 迴圈執行速度太快,導致每秒 API 請求過多。為了解決這個問題,開發者嘗試引入一個睡眠函數listFiles來延遲API請求。
睡眠函數旨在延遲listFiles函數的執行3000毫秒。但是,該程式碼並未如預期運作。問題在於 setTimeout 函數,它本身並不會傳回可等待的 Promise。
要解決此問題,需要透過超時輔助函數來Promisify setTimeout 函數:
function timeout(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
此外,可以修改睡眠函數以使用超時助手function:
async function sleep(fn, ...args) { await timeout(3000); return fn(...args); }
或者,要在不使用基於回調的睡眠函數的情況下減慢while循環,可以使用以下方法:
while (goOn) { // other code var [parents] = await Promise.all([ listFiles(nextPageToken).then(requestParents), timeout(5000) ]); // other code }
此方法可確保計算的父母至少需要 5 秒,有效減慢循環速度。
以上是如何使用Async/Await和setTimeout有效控制API請求速率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!