2016-03-22 6 views
0

私は急行を使用しています。nodejsはリクエストから変数を返します

コントローラから、私はURLにリクエストを行い、cheerioを使ってHTMLタグを取得する関数を呼び出します。私はすべてのconsole.logが動作しても、その値を返すことはできません。

コード:

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 
    } 

} 

私はタイトルのVARをretriveすることができますよ。しかし、リターン(内部リクエストでさえ)リターンはオリジナルの値を変更しません。これは、同期についての何かかもしれません..しかし、私は本当に迷ってしまいました..

任意の光?¿

答えて

2

要求は非同期で作られています。あなたの出力があるべき、というこう

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 
    }) ; 
} 

標準Node.jsのアーキテクチャである、コールバックを追加する必要があります。

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

私はしかし後に、コールバックを追加した「解析( - ..」私がconsole.log(newData)に 'none'と表示された場合は、ルータを終了する前にコールします。 – user1343998

+0

@ user1343998これは非同期なので、コールバックを持つ関数の後に書かれたものは、私の答えをチェックして、私はそれを編集した – VirginieLGB

関連する問題