synchrone et asynchrone de la boucle en javascript
Sont des boucles synchrone ou asynchrone en JavaScript? (for, while, etc)
En supposant que j'ai:
for(let i=0; i<10; i++){
//A (nested stuff...)
}
//B ...
À l'aide de for
l'exécution de B
démarre avant A
parfois... (de manière asynchrone)
Est-il un moyen d'utiliser les déclarations en mode synchrone?
"à l'Aide de
il peut être n'importe quoi, plus d'instructions imbriquées, ajax, logique etc etc
ce qui va apparaître à arriver, c'est que les rappels enregistrés pour les fonctions faisant asynchronous I/O - par exemple - sont appelés après que B ait exécuté. Toutefois, le code ci-dessus fonctionne de manière séquentielle et à un moment plus tard, vos rappels sont appelés.
Double Possible de JavaScript, Node.js: est la Matrice.forEach asynchrone?
for
l'exécution de B
démarre avant A
parfois" Pouvez-vous créer un stacksnippets à démontrer?il peut être n'importe quoi, plus d'instructions imbriquées, ajax, logique etc etc
for
boucle est synchrone. B
ne doit pas être exécuté avant for
boucle est terminée. Pouvez-vous démontrer en cas de B
"parfois" commencer l'exécution avant l' for
boucle est terminée? Existe-il des opérations asynchrones au sein de for
boucle qui ne peut pas être appelé jusqu'à un certain moment dans l'avenir, après B
a commencé l'exécution? Voir stackoverflow.com/help/mcve.ce qui va apparaître à arriver, c'est que les rappels enregistrés pour les fonctions faisant asynchronous I/O - par exemple - sont appelés après que B ait exécuté. Toutefois, le code ci-dessus fonctionne de manière séquentielle et à un moment plus tard, vos rappels sont appelés.
Double Possible de JavaScript, Node.js: est la Matrice.forEach asynchrone?
OriginalL'auteur neoDev | 2017-02-11
Vous devez vous connecter pour publier un commentaire.
La boucle for s'exécute immédiatement à la réalisation, tandis que toutes vos opérations asynchrones sont démarrés.
Bien, nous avons ici quelques boucles imbriquées. Avis, "BBB" se déclenche toujours après.
maintenant, regardez ce
C'est parce que de quelque chose qui s'appelle la "boucle". Et le fait que, avec setTimeout nous sommes en simulant une opération asynchrone. Il pourrait être un appel ajax ou certains autres async processus.
Check this out: http://latentflip.com/loupe
Cela va vraiment vous aider à comprendre ces sortes de async/boucle de synchronisation de sujets.
mis à jour pour montrer comment les promesses pourrait fonctionner ici (étant donné les commentaires ci-dessous):
laissez-moi savoir si je ne suis pas assez clair.
eh bien, pas dans votre question initiale, parce qu'étant donné une boucle standard - il sera toujours exécuté jusqu'à la fin avant de "BBB" arrive. MAIS, je suppose que vous avez une sorte opération asynchrone qui "pourrait prendre un certain temps" et "BBB" vient avant, est-ce correct?
oui plusieurs qui "pourrait prendre un certain temps"
ok, donne-moi une seconde, et je vais mettre à jour ma réponse
OriginalL'auteur james emanon
Si vous placez asynchrone boucles à l'intérieur d'un
for...loop
et que vous voulez arrêter la boucle jusqu'à ce que chaque opération se termine, vous devez utiliser leasync/await
syntaxe comme celle-ci.someAsyncTask
l'intérieur de la boucle.ouais c'est parce que foo est une Promesse, il suffit de mettre ce code dans
foo().then(() => { /*Your code here*/ })
OriginalL'auteur Fernando Carvajal
OriginalL'auteur jales cardoso
OriginalL'auteur Italo José