0
votes

Promesse sur la boucle de foresach qui contient des promesses

J'ai imbriqué des boucles de foresach sur lesquelles l'un d'entre eux contient un autre appel attendu. Je veux que ma fonction ne soit que quelque chose d'être exécuté qu'après la fin de la boucle imbriquée. Dès maintenant Dosomething () est d'abord exécuté. XXX

Dosomething ();


1 commentaires

Je suppose que dialogue (); Devrait faire partie du bloc de code comme dernière ligne?


3 Réponses :


0
votes

Chaque fois que je dois utiliser des attentes à l'intérieur d'une foreach (ou de toute boucle d'itérateur; pour, tandis que, tandis que, des méthodes de tableau), j'aime créer un petit tableau où je stocke les promesses faites.

Je vais taper. sur un exemple. J'ai une liste de 10 URL, je souhaite exécuter une extraction à la recherche et stocker les résultats avant d'exécuter doSomething () code>. Mon runfetch () code> -fonction est asynchrone et par défaut (sauf si je l'attends) renvoie une promesse. Après itération, j'attendrai toutes les promesses en même temps, afin qu'ils puissent courir à Parallell, mais attendez-vous toujours le plus lent. P>

const urls = [...] // my urls
const promises = []

for (const url of urls) {
    promises.push( runFetch(url) )
}

const results = await Promise.all(promises)

//now that all my fetches are done, I can continue.
doSomething()


0 commentaires

0
votes

foreach peut être peu délicat dans de telles situations, vous pouvez simplement utiliser pour boucles à la place comme Ils ne sauront pas à l'élément suivant jusqu'à ce que toutes les promesses ne soient pas résolues xxx


0 commentaires

0
votes

JavaScript est-ce parce que Pancheach n'est pas conscient de la promesse. Il ne peut pas supporter ASYNC et attendre afin que vous ne puissiez pas utiliser attendre dans la recherche. Au lieu de cela, utilisez un pour ... de boucle: xxx

de cette façon, les boucles imbriquées exécuteront d'abord et Dosomething () Dernier.

Voici un bon post si vous voulez en savoir plus: https://zellwk.com/blog/async-await-in-loops/ < / a>


0 commentaires