2016-06-27 8 views
-1

Das ist eine andere Frage und ich kann keine Lösung dafür finden, bitte markieren Sie es nicht doppelt.Wie nodejs async Modul zu verwenden?

Ich kann außerhalb der Funktion auf Variable op nicht zugreifen. Sollte ich ein Async-Modul von nodjes verwenden? Ich habe zwei console.logs. Aber nur innerhalb des Funktionsprotokolls funktioniert.

Ich habe andere Fragen Antworten versucht. Dennoch ist es nicht

var http = require('http'); 
console.log("hi") 
var options = { 
    host: 'api.usergrid.com', 
    path: '/siddharth1/sandbox/restaurants' 
}; 
var op = []; //declaring outside function 
var req = http.get(options, function(res) { 

    // Buffer the body entirely for processing as a whole. 
    var bodyChunks = []; 
    res.on('data', function(chunk) { 
     // You can process streamed parts here... 
     bodyChunks.push(chunk); 
    }).on('end', function() { 
     var body = Buffer.concat(bodyChunks); 

     // ...and/or process the entire body here. 
     var body2 = JSON.parse(body); 

     op = body2.entities.map(function(item) { 
      return item.name; 
     }); 
     console.log(op); // only this works 
    }) 
}); 

req.on('error', function(e) { 
    console.log('ERROR: ' + e.message); 
}); 


console.log("outside function " + op); //this doesnt work 


console.log('Server listening on port 80'); 
+1

Das console.log, das nicht funktioniert, funktioniert nicht, da es ausgeführt wird, bevor der Rückruf vom Server zurückkehrt. Die wirkliche Frage hier ist, warum müssen Sie den Wert außerhalb des Rückrufs betrachten? Lassen Sie uns das beantworten, bevor wir über die Verwendung von Async sprechen. –

Antwort

0

Node.js die Variable op als leeres Array instanziiert arbeiten:

var op = []; //declaring outside function 

Es ruft dann die .get() Funktion des HTTP-Modul, und übergibt sie options und eine Rückruffunktion.

var req = http.get(options, function(res) { 
    ... 
}); 

Der Code innerhalb der Callback-Funktion ist nicht ausgeführt, bis eine HTTP-GET-Anforderung von der Anwendung empfangen wird.

Knoten fährt dann fort und führt den Rest des Codes:

console.log("outside function " + op); //this doesnt work 

Die obige Zeile wird ausgeführt, und in der Tat, op ist ein leeres Array, wie Sie es definiert ein leeres Array sein - und nichts hat noch modifiziertes "op".

Der Server wartet dann auf eingehende HTTP-Anforderungen.

Viel später geben Sie natürlich eine HTTP GET Anfrage an Ihren Server ab. Die von Ihnen registrierte Callback-Funktion wird aufgerufen, und der Code innerhalb dieser Funktion wird ausgeführt.

Wenn ich Sie wäre, würde ich einige grundlegende Tutorials auf Node.js untersuchen, insbesondere in seinem nicht blockierenden Modell. Viel Glück.

Hinweis: Ryan Dahl's original node.js presentation ist ein ziemlich langes Video und ein wenig alt, aber perfekt erklärt die Art und Weise, wie Node.js funktioniert, und ich empfehle Ihnen, es geben Sie eine Uhr.

+0

Vielen Dank, erklären Sie im Detail. Ich würde es mir auf jeden Fall ansehen. Leider muss ich morgen meinen Code zeigen, und ich bin davon betroffen :(Versuche gerade, einen Affen-Patch zu finden. –