Node.js: la Meilleure façon d'effectuer de multiples opérations asynchrones, puis faire quelque chose d'autre?

Dans le code suivant, je suis en train de faire plusieurs (environ 10) les requêtes HTTP et RSS analyse d'un seul coup.

Je suis en utilisant le standard forEach construire sur un tableau d'Uri j'ai besoin d'accéder et d'analyser le résultat de l'.

Code:

var articles;

feedsToFetch.forEach(function (feedUri)
{   
        feed(feedUri, function(err, feedArticles) 
        {
            if (err)
            {
                throw err;
            }
            else
            {
                articles = articles.concat(feedArticles);
            }
        });
 });

 //Code I want to run once all feedUris have been visited

Je comprends que lorsque l'appel d'une fonction une fois que je devrais être en utilisant une fonction de rappel. Toutefois, la seule façon que je peux penser de l'utilisation d'un rappel dans cet exemple serait d'appeler une fonction qui compte le nombre de fois où il a été appelé et ne continue quand il a été appelé le même nombre de fois que feedsToFetch.length qui semble hacky.

Donc ma question est, quelle est la meilleure façon de gérer ce type de situation node.js.

De préférence sans aucune forme de blocage! (J'ai encore envie que sa grande vitesse). Est-il des promesses ou quelque chose d'autre?

Grâce,
Danny

Oui, les promesses sont la façon la plus simple d'aller. Si vous préférez cuisiner votre propre solution en utilisant la norme JS, cette réponse de la mine peut être facilement adapté.
veuillez afficher le code pour le feed() fonction.
c'est peut-être la préférence personnelle, mais je ne pense pas que les Promesses soient le plus "simple" de chemin à faire. J'ai apporté une réponse à étendre sur ce point.
Vous l'avez compris: l'utilisation d'un compteur et de compter le nombre de demandes présentées et complété. C'est fondamentalement ce que async et les promesses faites à l'interne. Environ un an avant la async bibliothèque a été écrit, j'ai écrit cette réponse pour résoudre ce problème: stackoverflow.com/questions/4631774/... . C'est un plus avancées de mise en œuvre qui permet de lancer des lots d'opérations asynchrones: stackoverflow.com/questions/13250746/...
Je dirais préférence personnelle, je ne vois pas aarosil de répondre beaucoup plus complexe que la vôtre.

OriginalL'auteur dannybrown | 2014-10-09