async.eachSeries dans node.js

J’ai une boucle dans node.js

 for (var i in files){ var all = fs.readdirsync("./0"); async.eachSeries(all, function(item){ check(item); } } 

Le check(item) a un rappel à une autre fonction.

Comme je peux le constater, async.eachSeries ne s’exécute pas de manière synchrone. La boucle continue à exécuter les autres éléments avant la fin du rappel dans la fonction check() .

Comment faire en sorte que la boucle attende jusqu’à la fin de l’itération (rappel compris)?

En supposant que check accepte un rappel, nous pouvons utiliser mapSeries pour y parvenir.

 async.mapSeries(files, function(file, outerCB) { var all = fs.readdirsync("./0"); async.mapSeries(all, function(item, cb){ check(item, cb); }, outerCB); }, function(err, results) { // This is called when everything's done }); 

La boucle externe doit également être asynchrone. Une des méthodes consiste à utiliser 2 boucles eachSeries ou une boucle externe pouvant être en parallèle (chacune) si les fichiers ne doivent pas être traités en série:

 var async = require('async'); async.eachSeries(files, function(file, outCb) { var all = fs.readFileSync(file); async.eachSeries(all, function(item, inCb) { check(item); inCb(null); // inner callback }, function(err) { outCb(null); // outer callback }); }, function(err) { console.log('all done!!!'); });