2016-03-22 8 views
0

Ich benutze Express.nodejs Rückgabevariable von Anfrage

Von einem Controller aus rufe ich eine Funktion auf, die eine Anfrage an eine URL sendet und ein HTML-Tag (mit cheerio) aufruft. Ich kann diesen Wert nicht zurückgeben, obwohl alle console.logs funktionieren.

Code:

router.get('/', function(req, res) { 
    var data = "none"; 
    var newData = parse(data); 

    console.log(newData); 
}) 



function parse(out){ 
    { 
     url = 'http://www.XXXXXX.int/'; 
     out = out || "Init value"; 
     request(url, out, function(error, response, html){ 
      console.log(out); 
      out ="ASDA"; 
      return out; //op1 
     }) ; 
     return out; //op2 
    } 

} 

Ich kann den Titel var retrive. Aber die Rückkehr (auch innerhalb der Anfrage) Rückkehr ändern nicht den Wert des Originals. Es könnte etwas über Synchronität sein .. aber ich bin wirklich verloren ..

Jedes Licht? ¿

Antwort

2

Anfragen werden asynchron gemacht. Sie benötigen einen Rückruf an, die Architektur Standard Node.JS ist

router.get('/', function(req, res) { 
    var data = "none"; 
    var newData = ""; 
    parse(data , function(val) { 
     newData = val; 
     console.log("newData : " , newData); 
     console.log("this happens last"); 
     // if you need to return anything, return it here. Do everything else you want to do inside this parse function. 
     return res.sendStatus(200); 
    }); 
    console.log("this happens first"); 
}); 

function parse(out , callback){ 
    url = 'http://www.XXXXXX.int/'; 
    out = out || "Init value"; 
    request(url, out, function(error, response, html){ 
     // don't you do anything with the error, response, html variables? 
     console.log("out : " , out); 
     out ="ASDA"; 
     return callback(out); //op1 
    }) ; 
} 

zu tun, dass, sollte die Ausgabe sein:

this happens first 
out : none 
newData : ASDA 
this happens last 
+0

ich den Rückruf hinzugefügt, aber nach dem "Parse (- .." Wenn ich console.log (newData) anzeige, wird 'none' angezeigt. – user1343998

+0

@ user1343998 wieder, das ist asynchron, also wird alles, was nach der Funktion mit Callback geschrieben wird, VORHER geschehen, was Sie in Ihrem Callback haben. Überprüfen Sie meine Antwort, ich habe es bearbeitet – VirginieLGB