Maison > interface Web > js tutoriel > Comment puis-je empêcher les requêtes API excessives lors de l'utilisation d'Async/Await en JavaScript ?

Comment puis-je empêcher les requêtes API excessives lors de l'utilisation d'Async/Await en JavaScript ?

Susan Sarandon
Libérer: 2024-12-15 12:34:11
original
373 Les gens l'ont consulté

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

Combinant les fonctions asynchrones, Await et setTimeout

Utilisant les dernières fonctionnalités asynchrones JavaScript, ce guide fournit une solution à un problème de performances courant : envoyer des requêtes excessives aux API Google dans un court laps de temps. L'objectif est d'introduire une fonction de veille pour retarder les requêtes et améliorer les performances des scripts.

Code original :

Ce code initial utilise efficacement le modèle async/wait :

async function asyncGenerator() {
    while (goOn) {
        var fileList = await listFiles(nextPageToken);
        var parents = await requestParents(fileList);
    }
}
Copier après la connexion

Problème :

Le code exécute la boucle while trop rapidement, ce qui entraîne un déluge de requêtes adressées à l'API Google.

Tentative de solution :

Pour résoudre ce problème, une fonction de mise en veille a été créée :

async function sleep(fn, par) {
    return await setTimeout(async function() {
        await fn(par);
    }, 3000, fn, par);
}
Copier après la connexion

Cependant, cette fonction ne parvient pas à renvoyer correctement la réponse à la demande.

Corriger Implémentation :

Le problème avec la fonction sleep réside dans l'absence de promesse renvoyée par setTimeout. Pour résoudre ce problème, une version promise peut être créée :

function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function sleep(fn, ...args) {
    await timeout(3000);
    return fn(...args);
}
Copier après la connexion

Boucle optimisée :

Pour ralentir l'exécution de la boucle, une fonction de veille qui met en pause tout le calcul n’est pas optimale. Une meilleure approche consiste à utiliser une construction Promise.all qui inclut la fonction sleep :

while (goOn) {
    var [parents] = await Promise.all([
        listFiles(nextPageToken).then(requestParents),
        timeout(5000)
    ]);
}
Copier après la connexion

Cette modification garantit que le calcul des parents prend au moins 5 secondes, ralentissant efficacement la boucle et empêchant une API excessive. demandes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal