如何在for循环中编写node.js异步?

时间:2016-02-12 06:24:21

标签: javascript node.js

我开始构建nodejs应用程序来从具有分页的站点中抓取数据。我写for循环来获取所有页面并推送所有url存储在一个数组中。在for循环中,我编写了async.eachSeries来逐个运行所有url,在完成运行后我想打印出成功消息。但我不知道如何将它们放在一起以使其正常工作。这是我的代码

for(var pageNo = 1; pageNo <=200; pageNo++){
  siterequest('https://www...../en/jobs/?by=&in=&page='+pageNo, function(err, res, body){
    if(!err && res.statusCode ==200){
        var $ = cheerio.load(body);
        var links = [];
        $('.headline3.job-name-title > strong > a').each(function(i, elem){
            links.push('https://www......com.kh/'+$(elem).attr('href'));
        });
        async.eachSeries(links, function(uri, next){
            console.log('i will go this '+uri);
            next();
        }, function(callback){
            console.log('I did it');
        });
      };
  });
};

上面的代码对我不起作用。请帮我! 提前致谢

1 个答案:

答案 0 :(得分:2)

当您使用async.js时,可以尝试async.times而不是for loop

async.times(200, function (paneNo, nextPage) {
  siterequest('https://www...../en/jobs/?by=&in=&page=' + (pageNo + 1), 
    function (err, res, body) {
      if (!err && res.statusCode ==200) {
        var $ = cheerio.load(body);
        var links = [];

        $('.headline3.job-name-title > strong > a').each(function (i, elem) {
          links.push('https://www......com.kh/'+$(elem).attr('href'));
        });

        async.eachSeries(links, function (uri, next) {
          console.log('i will go this '+ uri);
          next();
        }, function(callback) {
          nextPage();
        });
      } else {
        nextPage(err);
      }
  });
}, function(err) {
  console.log('Done!');
});