Votre question est que vous êtes ici en utilisant une bibliothèque de async pour une fonction qui n'est pas asynchrone (ou non d'agir comme il est asynchrone). Ce que async.eachLimit
fait est de parcourir chaque élément du tableau, en exécutant seulement limit
montant à la fois, et attend callback()
pour être appelé en disant que l'itération en cours est terminée et peut en ajouter une autre à exécuter.
Dans votre exemple de code, le rappel (lorsqu'il n'est pas commenté) est appelé immédiatement après avoir tenté d'appeler outsideFunction
car l'appel de fonction est non bloquant. Il n'attend pas parce que async dit "On m'a dit que c'est fait, je vais passer au suivant" donc tous les 100 vont essayer d'être exécutés en même temps. Si outsideFunction
est une fonction asynchrone, a besoin de un rappel (ou avoir des promesses d'utilisation) pour dire qu'il a fini d'exécuter, et à l'intérieur de ce rappel vous appelez le rappel pour async.eachLimit
et alors il ne fera que 10 à la fois dans le chemin tu veux. Voici un exemple:
async.eachLimit(items, 10, function(item, callback)
{
outsideFunction(item.attrOne, item.attrTwo, function(someResult)
{
// Your outside function calls back saying it's finished ...
callback(); // ... so we tell async we're done
});
},
function(err)
{
console.log(err);
});
Si outsideFunction
n'est pas votre fonction, et la fonction est en fait asynchrone, alors il est soit à l'aide de promesses ou vous avez besoin de trouver une bibliothèque qui écrit des fonctions asynchrones correctement. Si la fonction n'est pas asynchrone, alors async.eachLimit
ne fonctionnera pas.
Si c'est votre fonction, vous devriez lui faire renvoyer un rappel pour dire que c'est fait (ou utiliser des promesses).
Que voulez-vous dire par «une fonction externe qui ne contient pas de rappel»? Est-ce que c'est asynchrone du tout? Si oui, comment savez-vous que c'est terminé quand il n'y a pas de rappel? – Bergi