Comment synchroniser un appel dans Node.js

J’ai l’extrait de code suivant:

var array = [1, 2, 3]; var data = 0; for(var i=0; i<array.length; i++){ asyncFunction(data++); } console.log(data); executeOtherFunction(data); 

Je m’attends à une valeur de données de 3 mais je la vois à 0 en raison de asyncFunction . Comment appeler executeOtherFunction lorsque tous les appels asyncFunction sont effectués?

Utilisez async.each :

 var async = require('async'); var data = 0; var array = [ 1, 2, 3 ]; async.each(array, function(item, done) { asyncFunction(data++, done); }, function(err) { if (err) ... // handle error console.log(data); executeOtherFunction(data); }); 

(en supposant que asyncFunction prenne deux arguments, un nombre ( data ) et un rappel)

Si asyncFunction est implémenté comme suit:

 function asyncFunction(n) { process.nextTick(function() { /* do some operations */ }); } 

Vous n’aurez alors aucun moyen de savoir quand asyncFunction est en train de s’exécuter, car il rest de la stack d’appels. Donc, il faudra avertir quand l’exécution est terminée.

 function asyncFunction(n, callback) { process.nextTick(function() { /* do some operations */ callback(); }); } 

Ceci utilise le mécanisme de rappel simple. Si vous souhaitez utiliser l’un des nombreux modules pour que cela soit géré pour vous, allez-y. Cependant, mettre en œuvre quelque chose comme avec des rappels de base peut ne pas être joli, mais ce n’est pas difficile.

 var array = [1, 2, 3]; var data = 0; var cntr = 0; function countnExecute() { if (++cntr === array.length) executeOtherFunction(data); } for(var i = 0; i < array.length; i++){ asyncFunction(data++, countnExecute); } 

Jetez un oeil à ce module, je pense que c’est ce que vous recherchez:

https://github.com/caolan/async