Extract/Return 来自请求的变量 - Javascript

Extract/Return var from Request - Javascript

我是 Node.js 的新手,我正在尝试使用在请求中声明的变量,但我需要在 Request.Is 之外使用它,这可能吗?

示例代码:

//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 :'(

上面代码的问题在于,当来自http调用的请求returns时,jsonArr中的值被推送,然后将值注入到jsonArr中。

您希望在该调用后访问 jsonArr 的值 returns.Which 您可以使用 promises 来实现。

或者只是使用 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.

或者使用延迟函数libraries refer 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) {
    ...
  })

您需要将 console.log 包装在回调中,如下所示。

下面的代码会记录[5]

var jsonArry = [];

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

test(5, function(data){
     console.log(data);
});

你的 jsonArr 变量只在你的请求函数内部起作用,因为它等待 url 响应,而你的外部 console.log 它逐行执行。您可以创建一个将在匿名函数内部调用的函数,以便在请求函数之外使用它。

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