Async 함수, Await 및 setTimeout 결합
최신 JavaScript 비동기 기능을 활용하여 이 가이드는 일반적인 성능 문제에 대한 솔루션을 제공합니다. 짧은 시간 내에 Google API에 과도한 요청을 보냅니다. 목표는 요청을 지연시키고 스크립트 성능을 향상시키는 절전 기능을 도입하는 것입니다.
원본 코드:
이 초기 코드는 async/await 패턴을 사용합니다. 효율적으로:
async function asyncGenerator() { while (goOn) { var fileList = await listFiles(nextPageToken); var parents = await requestParents(fileList); } }
문제:
코드가 while 루프를 너무 빠르게 실행하여 Google API에 대한 요청이 폭주하게 됩니다.
시도한 해결 방법:
이 문제를 해결하려면 수면 함수가 생성되었습니다:
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); }
최적화된 루프:
루프 실행 속도를 늦추기 위해 전체 계산을 일시 중지하는 절전 기능 최적이 아닙니다. 더 나은 접근 방식은 절전 기능이 포함된 Promise.all 구성을 사용하는 것입니다.
while (goOn) { var [parents] = await Promise.all([ listFiles(nextPageToken).then(requestParents), timeout(5000) ]); }
이 수정을 통해 상위 계산에 최소 5초가 걸리므로 루프 속도가 효과적으로 느려지고 과도한 API가 방지됩니다. 요청합니다.
위 내용은 JavaScript에서 Async/Await를 사용할 때 과도한 API 요청을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!