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

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

Susan Sarandon
Susan Sarandon原创
2024-12-27 17:38:11578浏览

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