2016-03-28 7 views
0

私はNode.jsで新しく、リクエスト内で宣言された変数を使用しようとしていますが、これをRequest.Isの外で使用する必要がありますか?リクエストからのvarの抽出/返却

サンプルコード:

//stackExample 

var request = require('request') 
    cheerio = require('cheerio') 
jsonArr = [] 
request ({ 
    url: 'http://youtube.com', 
    encoding: 'utf8' 
    }, 
    function (err, resp, body){ 

    if(!err && resp.statusCode == 200){ 
     var $ = cheerio.load(body); 
     $('.yt-lockup-title').each(function(){ 
     var title = $(this).find('a').text(); 
     jsonArr.push({ 
      titulo: title, 
     }); 
     }); 
    } 
    console.log(jsonArr)   //Here Works! 
    } 
); 

console.log(jsonArr)    //Here not :(, I need works here :'(

答えて

0

あなたjsonArr変数だけで、あなたの要求機能内部で動作ログに記録されます。匿名関数の中で呼び出される関数を作成して、それを要求関数の外で使用することができます。

var request = require('request') 
    cheerio = require('cheerio') 
jsonArr = [] 
request ({ 
    url: 'http://youtube.com', 
    encoding: 'utf8' 
    }, 
    function (err, resp, body){ 

    if(!err && resp.statusCode == 200){ 
     var $ = cheerio.load(body); 
     $('.yt-lockup-title').each(function(){ 
     var title = $(this).find('a').text(); 
     jsonArr.push({ 
      titulo: title, 
     }); 
     updated() 
     }); 
    } 
    console.log(jsonArr)  
    } 
); 

function updated(){ 
    console.log(jsonArr) 
} 
0

問題上記のコードでは、要求は、HTTP呼び出しから復帰した後jsonArrに値を注入する際jsonArrの値が押下されることです。

jsonArrの値にアクセスするには、その呼び出しが返された後で、約束を使って行うことができます。

また、setTimeoutを使用したハックだけです。

setTimeout(function(){ 
console.log(jsonArr); // use value after time interval 
},1000);    // you can set this value depending on approx time it takes for your request to complete. 

それともdefered機能librariesを使用thisを参照してください。

var sequence = Futures.sequence(); 

sequence 
    .then(function(next) { 
    http.get({}, next); 
    }) 
    .then(function(next, res) { 
    res.on("data", next); 
    }) 
    .then(function(next, d) { 
    http.get({}, next); 
    }) 
    .then(function(next, res) { 
    ... 
    }) 
0

console.logをコールバックで次のようにラップする必要があります。

次のコードは、これは、URLの応答を待つので、あなたは、外線によって、その実行の行をCONSOLE.LOGながら[5]

var jsonArry = []; 

var test = function(num, callback){ 
    jsonArry.push(num); 
    callback(jsonArry); 
}; 

test(5, function(data){ 
    console.log(data); 
}); 
関連する問題