Async: forEachOf - le rappel final n'est pas appelé

Créé le 29 juin 2015  ·  1Commentaire  ·  Source: caolan/async

EDIT: Problème résolu (j'ai parlé trop tôt!) ... (regardez ci-dessous)

J'utilise la méthode .forEachOf pour lancer un rappel après avoir parcouru un objet donné. Le seul problème est que le rappel final passé comme troisième argument à forEachOf ne semble jamais être lancé.

Voici un exemple de code du problème:

var async = require('async');

var anArray = [];

var testObj = {
    'a': '1',
    'b': '2',
    'c': '3'
};

async.forEachOf(testObj, function (elem, key, callback) {
    console.log(elem);

    anArray.push(elem);
}, function (err) {
    if (err) {
        console.error(err.message);
    }

    console.log("This line should be printed at the end.", anArray);
});

Le voici sur Runnable: http://code.runnable.com/VZELB92Qa1Y7JQuq/async-foreachof-node-js-not-working-2-for-callback

Maintenant, je pourrais faire quelque chose de totalement faux ici, mais j'ai posté cette question sur / r / node sur reddit et Stack Overflow , et je n'ai obtenu aucune réponse utile. Qu'est-ce que je fais de mal ici? Cela me rend fou !!!

EDIT: Il semble que dans cet exemple initial, j'ai oublié d'ajouter une instruction 'return callback ()'. Dans l'exemple particulier où j'ai rencontré ce problème dans mon code, j'ai une deuxième méthode asynchrone dans laquelle je fais cette instruction 'return callback ()'. Il semble que je devrais utiliser une autre fonctionnalité de flux de contrôle pour appeler le rappel une fois que la deuxième méthode asynchrone a fini de s'exécuter. Mes excuses. Veuillez fermer ce problème dès que possible !!!

D'un autre côté, je pense qu'il sera utile aux autres futurs utilisateurs utilisant cette méthode de savoir comment utiliser correctement l'instruction 'return callback ()'. La documentation fait définitivement défaut dans ce domaine, et il n'y a pas beaucoup de méthodes individuelles dans cette bibliothèque en l'état, donc trouver de l'aide est incroyablement lent, fastidieux et difficile!

question

Commentaire le plus utile

mec, vous devez appeler 'callback ()' après chaque itération.

async.forEachOf(testObj, function (elem, key, callback) {
    console.log(elem);
    anArray.push(elem);
callback() //<<<<<<<<<
},...

>Tous les commentaires

mec, vous devez appeler 'callback ()' après chaque itération.

async.forEachOf(testObj, function (elem, key, callback) {
    console.log(elem);
    anArray.push(elem);
callback() //<<<<<<<<<
},...
Cette page vous a été utile?
0 / 5 - 0 notes