> 웹 프론트엔드 > JS 튜토리얼 > JavaScript에서 Async/Await를 사용할 때 과도한 API 요청을 방지하려면 어떻게 해야 합니까?

JavaScript에서 Async/Await를 사용할 때 과도한 API 요청을 방지하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-12-15 12:34:11
원래의
371명이 탐색했습니다.

How Can I Prevent Excessive API Requests When Using Async/Await in JavaScript?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿