J'ai une boucle dans node.js
for (var i in files){
var all = fs.readdirsync("./0");
async.eachSeries(all, function(item){
check(item);
}
}
La check(item)
a un rappel vers une autre fonction.
Comme je peux le voir, le async.eachSeries
Ne s'exécute pas de manière synchrone. La boucle continue d'exécuter les autres éléments, avant la fin du rappel dans la fonction check()
.
Comment faire attendre la boucle jusqu'à la fin de l'itération (y compris le rappel)?
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. L'une des méthodes consiste à utiliser 2 boucles eachSeries ou la boucle externe peut être en parallèle (chacune) si les fichiers n'ont 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!!!');
});