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
Susan Sarandonoriginal
2024-12-27 17:38:11578parcourir

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));
}

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);
}

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
}

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:
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