/ / Utilisation du paramètre error pour séparer les processus ayant échoué dans async.mapLimit - javascript, node.js

Utilisation du paramètre error pour séparer les processus ayant échoué dans async.mapLimit - javascript, node.js

J'utilise async.mapLimit pour créer des procédures de concurrence sur un tableau avec une limite de 10:

async.mapLimit(files, 10, function(file, callback) {

... etc...

}, function(error, files) {

... etc..
});

Dans la fonction principale, j’exécute une opération asynchrone avec child_process, et si tout se passe comme il se doit, j’appelle simplement le rappel:

callback(null, files);

Mais ... quand quelque chose de grave se produit, j’ai BESOIN d’appeler le rappel en passant le fichier, parce que je ne veux pas tout arrêter, j’assigne simplement le fichier avec une propriété error et appelle le rappel:

file.error = error;
callback(null, file);

Ainsi, lorsque le second rappel async.mapLimit est déclenché, j'ai un tableau de fichiers:

, function(error, files) {

console.log(files);
});

sortie:

[
{
name: "file_2",
error: "something"...
},
{
name: "file_1",
...etc
}
]

Donc, j'ai besoin de séparer les fichiers qui ont échoué, en faisant:

var failedFiles = [];
var okFiles = [];

files.forEach(function(file) {
if (file.error)
failedFiles.push(file);
else
okFiles.push(file;
});

Je voudrais savoir s’il n’est pas possible de renvoyer les fichiers qui ont échoué en tant que tableau et d’y accéder ensuite par le paramètre error du deuxième rappel async.mapLimit.

Merci d'avance :).

Réponses:

0 pour la réponse № 1

async.mapLimit() s’arrêtera immédiatement quand une itération "retournera" une erreur, il ne sera donc pas possible de faire ce que vous voulez.

Comme alternative, au lieu d'utiliser async.mapLimit() tu pourrais utiliser async.eachLimit() et poussez les objets de fichier dans le tableau respectif à l'intérieur de la fonction itérateur:

var failedFiles = [];
var okFiles     = [];

async.eachLimit(files, 10, function(file, callback) {
if (SOME_ERROR) {
failedFiles.push(file);
} else {
okFiles.push(file);
}
callback();
}, function(err) {
...
});