Maison > interface Web > js tutoriel > Comment contrôler efficacement le taux de requêtes API à l'aide d'Async/Await et setTimeout ?

Comment contrôler efficacement le taux de requêtes API à l'aide d'Async/Await et setTimeout ?

Susan Sarandon
Libérer: 2024-12-27 17:38:11
original
606 Les gens l'ont consulté

How to Effectively Control the Rate of API Requests Using Async/Await and setTimeout?

Combinaison de fonctions asynchrones Await setTimeout

Dans cet extrait de code, la fonction asyncGenerator tente d'utiliser les fonctionnalités d'attente asynchrone pour traiter une liste de fichiers de l'API Google. Cependant, la boucle while s'exécute trop rapidement, ce qui entraîne un nombre excessif de requêtes API par seconde. Pour résoudre ce problème, le développeur tente d'introduire une fonction de veille, listFiles, pour retarder les requêtes API.

La fonction de veille est conçue pour retarder l'exécution de la fonction listFiles de 3 000 millisecondes. Cependant, le code ne fonctionne pas comme prévu. Le problème réside dans la fonction setTimeout, qui ne renvoie pas nativement une promesse attendue.

Pour résoudre ce problème, il est nécessaire de promettre la fonction setTimeout via la fonction timeout helper :

function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
Copier après la connexion

De plus, la fonction de veille peut être modifiée pour utiliser la fonction d'assistance de délai d'attente :

async function sleep(fn, ...args) {
    await timeout(3000);
    return fn(...args);
}
Copier après la connexion

Alternativement, pour Pour ralentir la boucle while sans utiliser de fonction de veille basée sur le rappel, l'approche suivante peut être utilisée :

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

Cette approche garantit que le calcul des parents prend au moins 5 secondes, ralentissant ainsi la boucle.

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!

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