2016-04-19 9 views
2

Ich habe meine Reise nur mit NodeJS gestartet und möchte eine einfache NodeJS App erstellen, die benötigt: - erste Anfrage/einige erste Daten über HTTP erhalten, - Nutzung erhalten json zu tun ein weiterer Satz von Anforderungen (einige können parallel ausgeführt werden, einige müssen zuerst ausgeführt werden, und die empfangenen Daten werden verwendet, um eine gültige URL zu erstellen).NodeJS - mehrere asynchrone HTTP-Anfragen

Wenn ich bedenke, dass nodejs asynchron ist und auf Callbacks basiert, frage ich mich, was ist der beste Weg dies zu erreichen, um 'sauberen Code' zu haben und nicht zu viel Code zu vermasseln.

Dank für Hinweise/Richtlinien, Mark

+0

Dies ist eine weitgehend subjektive Sache, aber meine Meinung ist, [Versprechen] zu verwenden (http://bluebirdjs.com/docs/getting-started.html) Ihren Rückruf zu organisieren Code. – tadman

+0

Überprüfen Sie dies :) https://www.npmjs.com/package/rx –

+0

@mark die angebotenen Antworten ergänzen einander und würde gut im Tandem funktionieren. – spb

Antwort

0

einig, dass dies subjektiv ist, ist verspricht die Art und Weise in der Regel zu gehen, gibt es einheimische Versprechen:

Native Promise Docs - MDN

für Ihre Frage, imo, das npm Modul Anfrage-Versprechen bietet einige großartige Lösungen. Es ist im Wesentlichen eine ‚Promisified“ -Version des Anforderungsmodul:

Es ermöglicht Sie/POST/PUT GET/DELETE und jede Anfrage mit einem Follow-up then() wo Sie auch weiterhin mehr Anrufe tun, wie so:.

-einer Code wird zuerst etwas von einem Server BEITRäGE, dann etwas anderes zu diesem Server.

function addUserToAccountName(url, accountName, username, password){ 
    var options = assignUrl(url); // assignUrl is not in this code 
    request 
    .get(options) //first get 
    .auth(username, password) 
    .then(function(res) { 
    var id = parseId(res.data, accountName); //parse response 
    return id; 
    }) 
    .then(function(id) { 
    var postOptions = Object.assign(defaultSettings, {url: url + id + '/users'}) 
    request.post(postOptions) // then make a post 
     .auth(username, password) 
     .then(function(response) { 
     //console.log(response); 
     }) 
     .catch(function(err) { 
     console.log((err.response.body.message)); 
     }) 
    }) 
} 

Sie haben soeben mit den .then(), was Sie aus den vorherigen .then() zurückkehren würden halten können, wird in die Funktion übergeben werden

Request-Promise

1

Vielleicht überprüfen Sie die Async-Bibliothek. Hat eine Menge eingebauter Funktionalität, die das zu erreichen scheint, wonach Sie suchen. Ein paar nützliche auf der Fledermaus könnte "async.waterfall" und "async.map" sein.

async.waterfall

async.map

Verwandte Themen