首页 >web前端 >js教程 >在 JavaScript 中使用 Async/Await 时如何防止过多的 API 请求?

在 JavaScript 中使用 Async/Await 时如何防止过多的 API 请求?

Susan Sarandon
Susan Sarandon原创
2024-12-15 12:34:11373浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn