Maison >interface Web >js tutoriel >Comment contrôler efficacement le taux de requêtes API à l'aide d'Async/Await et 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!