1
votes

Comment attendre la fonction pour terminer pour la boucle js?

J'ai une boucle for qui parcourt les fonctions et je veux que cette boucle attende que la fonction soit terminée pour passer à la fonction suivante. Comment faire?

middlewares = []

for (let i in middlewares) {
    middlewares[i]()
}


4 commentaires

les fonctions middlewares sont-elles asynchrones ou synchrones?


si middlewares [i] est une fonction synchrone, donc votre code fait exactement ce que vous voulez qu'il fasse. S'il est asynchrone, lisez ici comment faire manipulez-le.


Nous aurons besoin de plus d'exemple. Ce code ne fait rien. S'ils sont asynchrones, vous pouvez les enchaîner avec des promesses.


Les fonctions middlewares peuvent être synchrones et asynchrones.


3 Réponses :


1
votes

Vous ne pouvez pas car for les boucles sont synchrones. Je recommande d'utiliser async pour cela.


0 commentaires

0
votes

Vous pouvez rendre les fonctions middlewares asynchrones. Cela permet d'attendre plus facilement la fin de la fonction, puis de passer à la suivante. Créer une fonction asynchrone est simple: fonction async (...) {...} . Découvrez-les ici .


0 commentaires

3
votes

La solution suivante fonctionnera si les fonctions middlewares renvoient une promesse lorsqu'elles sont asynchrones

async function loop(middlewares) {
   for (let fn of middlewares) {
     await fn();
   }
}

loop(middlewares)
  .then(() => console.log("finished");


1 commentaires

Vous n'avez même pas besoin de l'envelopper dans Promise.resolve () . await le fait implicitement pour vous. Vous pouvez simplement attendre fn () . "Si la valeur de l'expression qui suit l'opérateur d'attente n'est pas une promesse, elle est convertie en une promesse résolue." - MDN await