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