在 node.js 中保存来自cheerio的数组

bog*_*viu 5 arraylist node.js cheerio

我有此代码,但无法创建新数组以供进一步使用:

var request = require("request");
var cheerio = require("cheerio");
var pag = [];
request('http://www.tastez.ro/tv.php?query=sopcast', function(error, response, body) {
  if (error) {
    return console.error('upload failed:', error);
  }

  var $ = cheerio.load(body);
    links = $(".page a"); //use your CSS selector here
    $(links).each(function(i, link){    
      var   sop = $(this).attr('href');
      pag[i] = sop;  //aici pun val gasite in locuri in array
    });
  pag.push(', '); 
});
for (var i=0; i<2; i++){
  console.log(pag[i]);
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,它正在列出undefined. 但是如果我把代码写成这样:

var request = require("request");
var cheerio = require("cheerio");
var pag = [];
request('http://www.tastez.ro/tv.php?query=sopcast', function(error, response, body) {
  if (error) {
    return console.error('upload failed:', error);
  }

  var $ = cheerio.load(body);
  links = $(".page a"); //use your CSS selector here
  $(links).each(function(i, link){    
    var sop = $(this).attr('href');
    pag[i] = sop;  //aici pun val gasite in locuri in array
  });
  pag.push(', ');
  for (var i=0; i<2; i++){
    console.log(pag[i]);
  }   
});
Run Code Online (Sandbox Code Playgroud)

然后它显示正确的结果,但仍然undefined在我以后想使用它时。有人可以帮我解决这个问题。

Cat*_*yst 4

Node.js 是异步的,这意味着当您打印数组时,抓取尚未完成。

我不完全确定你的最终目标是什么,但这里有一种方法可以用最小的改变来完成你正在尝试的事情:

var request = require("request");
var cheerio = require("cheerio");
var pag = [];

var scrape = function( callback ) {
    request('http://www.tastez.ro/tv.php?query=sopcast', function(error, response, body) {
      if (error) {
        return console.error('upload failed:', error);
      }

    var $ = cheerio.load(body);
     links = $(".page a"); //use your CSS selector here
      $(links).each(function(i, link){    
        var sop = $(this).attr('href');
        pag[i] = sop;  //aici pun val gasite in locuri in array

      });
    pag.push(', '); 
    if (callback) callback()
    });
}
scrape(function() {
    for (var i=0; i<2; i++){
    console.log(pag[i]);}
})
Run Code Online (Sandbox Code Playgroud)