首頁 >web前端 >js教程 >如何使用Async/Await和setTimeout有效控制API請求速率?

如何使用Async/Await和setTimeout有效控制API請求速率?

Susan Sarandon
Susan Sarandon原創
2024-12-27 17:38:11564瀏覽

How to Effectively Control the Rate of API Requests Using Async/Await and setTimeout?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn