首頁 > web前端 > js教程 > 在 JavaScript 中使用 Async/Await 時如何防止過多的 API 請求?

在 JavaScript 中使用 Async/Await 時如何防止過多的 API 請求?

Susan Sarandon
發布: 2024-12-15 12:34:11
原創
371 人瀏覽過

How Can I Prevent Excessive API Requests When Using Async/Await in JavaScript?

結合非同步函數、Await 和setTimeout

利用最新的JavaScript 非同步功能,本指南提供了常見效能問題的解決方案:在短時間內向Google API 發送過多請求。目標是引入睡眠函數來延遲請求並增強腳本效能。

原始程式碼:

此初始程式碼有效地採用了非同步/等待模式:

async function asyncGenerator() {
    while (goOn) {
        var fileList = await listFiles(nextPageToken);
        var parents = await requestParents(fileList);
    }
}
登入後複製

問題:

程式碼執行while 迴圈的速度太快,導致向Google API 發出大量請求。

嘗試的解決方案:

為了解決這個問題,創建了一個 sleep 函數:

async function sleep(fn, par) {
    return await setTimeout(async function() {
        await fn(par);
    }, 3000, fn, par);
}
登入後複製

但是函數無法回傳請求回應

正確實作:

sleep 函數的問題在於缺少 setTimeout 傳回的承諾。為了解決這個問題,可以創建一個承諾版本:

function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function sleep(fn, ...args) {
    await timeout(3000);
    return fn(...args);
}
登入後複製

最佳化循環:

為了減慢循環執行速度,可以使用暫停整個計算的睡眠函數不是最佳的。更好的方法是使用包含 sleep 函數的 Promise.all 建構:

while (goOn) {
    var [parents] = await Promise.all([
        listFiles(nextPageToken).then(requestParents),
        timeout(5000)
    ]);
}
登入後複製

此修改可確保父母的計算至少需要 5 秒,有效減慢循環並防止過多的 API請求。

以上是在 JavaScript 中使用 Async/Await 時如何防止過多的 API 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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