Node.js: Beste Weg, um mehrere asynchrone Operationen, dann etwas anderes tun?

Im folgenden code versuche ich, mehrere (etwa 10) HTTP-Anfragen und RSS-analysiert in einem Rutsch.

Ich bin mit dem standard - forEach Konstrukt auf ein array von URIs, die ich brauche, um Zugang und analysieren das Ergebnis.

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

Ich verstehe, dass, wenn Sie eine Funktion aufrufen, sobald ich mit sollte ein Rückruf. Jedoch, die einzige Möglichkeit die ich denken kann mit einem Rückruf wäre in diesem Beispiel zu nennen, eine Funktion, die zählt, wie oft es aufgerufen wurde und nur fortgesetzt wird, wenn es aufgerufen wurde die gleiche Menge an Zeiten, als feedsToFetch.length scheint hacky.

Also meine Frage ist, was ist der beste Weg, zu behandeln diese Art von situation, in node.js.

Vorzugsweise ohne irgendeine form von Sperrung! (Ich will immer noch rasend schneller Geschwindigkeit). Ist es verspricht oder etwas anderes?

Dank,
Danny

  • Ja, Versprechen sind der einfachste Weg zu gehen. Wenn Sie lieber Kochen Sie sich Ihre eigene Lösung mit standard-JS diese Antwort von mir leicht angepasst werden kann.
  • bitte zeigen Sie den code für die feed() Funktion.
  • vielleicht ist es persönliche Präferenz, aber ich glaube nicht, dass die Versprechen der "einfachste" Weg zu gehen. Ich habe eine Antwort zu erweitern.
  • Sie haben es herausgefunden: verwenden Sie einen Zähler und zählt die Anzahl der Anfragen gemacht und abgeschlossen. Es ist im Grunde, was async und Versprechen tun Sie intern. Etwa ein Jahr vor dem async-Bibliothek geschrieben wurde, schrieb ich diese Antwort zu lösen genau dieses problem: stackoverflow.com/questions/4631774/... . Dies ist eine erweiterte Implementierung, ermöglicht den Start-batches von asynchronen Operationen: stackoverflow.com/questions/13250746/...
  • Ich würde sagen, persönliche Vorliebe - ich sehe nicht, aarosil die Antwort viel komplexer als deins.
  • ist es für Sie wichtig, was, um den Artikel am Ende in? Die serial option von @naomik unten ist das einzige, das erhalten der Bestellung, wenn ich mich nicht Irre.
  • mit dem Versprechen, dass wäre eine standard-for-Schleife... verspricht eine tatsächliche Abstraktion auf die Sequenzierung Dinge - es ist viel mehr sound und vollständiger als die 'async' - Modul, die meisten modernen Sprachen haben Sie unter verschiedenen Namen und Sie waren weit verbreitet.
  • ist weit verbreitet [alles außer IE]". Ich mag, wie Sie Kritik meine Antwort für die Verwendung einer lib komplett mit Blick auf die Tatsache, dass ich, sofern ein roll-your-own-Lösung als gut. Zur gleichen Zeit, Sie sind im Grunde sagen "etwas verwenden, ist nicht unterstützt in IE oder Holen Sie sich ein polyfill (siehe: "lib")".
  • Ich stehe korrigiert-- .Karte bewahrt Ordnung.

InformationsquelleAutor dannybrown | 2014-10-09
Schreibe einen Kommentar