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

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

Susan Sarandon
發布: 2024-12-27 17:38:11
原創
552 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板