结合异步函数、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中文网其他相关文章!