Javascript/NodeJS 回调函数和循环

标签 javascript jquery node.js web-scraping cheerio

我已经用 cheeriorequest 制作了一个网络爬虫,现在我正在尝试在 url 数组上实现一个循环。

不幸的是,我的通话和回调出了问题,但我不知道是什么。

这是我的代码:

var getWebData = function(url) {
  var i = 1;
  var data = [];
  for (c = 0; c < url.length; c++) {
    data[i] = request(url[c], function(err, resp, body) {
          console.log('ok');
           if (!err) {
             console.log('there');
             var $ = cheerio.load(body);
             $('.text').each(function(i, element) {
               var jsObject = { name : "", description : "", price: "", categorie: "", pricePerKg: "", capacity: "", weight: "", scrapingDate : "", url: ""};
               var name = 'TESTOK';
               jsObject.name = name;
               data.push(jsObject);
            })
            return data;
         }
         console.log('but');
       });
    i++;
  }
  var json = JSON.stringify(data);
  fs.writeFile('output.json', JSON.stringify(json, null, 4), function(err) {
      console.log('File successfully written!');
  })
}

getWebData(url);
app.listen('8080');

请注意,我的任何调试打印都没有打印。

有谁知道我的代码出了什么问题以及我该如何使其工作?

最佳答案

请求是 Aysnc

var json = JSON.stringify(data);
fs.writeFile('output.json', JSON.stringify(json, null, 4), function(err) {
  console.log('File successfully written!');
})

上面的代码在 for 循环完成执行并填充数据对象之前运行。 尝试在循环完成执行时执行这段代码。

首先运行此命令 npm install async --save

    var async = require('async');

    var getWebData = function(url){
    var data = [];
    async.eachSeries(url, function(urlSingle , cb){
       request(urlSingle, function(err, resp, body) {
        //write your logic here and push data in to data object
        cb();
       })
    },function(){
     // this will rum when loop is done
     var json = JSON.stringify(data);
        fs.writeFile('output.json', JSON.stringify(json, null, 4),         function(err) {
            console.log('File successfully written!');
        });
    });
    }

关于Javascript/NodeJS 回调函数和循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722184/

相关文章:

javascript - Karma 中可以过滤文件吗?

JQUERY:获取已选中和未选中复选框的ID

javascript - Node js请求体类型为[Object, Object]

node.js - 为什么li标签没有获取循环变量的值?

javascript - 保持大型菜单可见,直到使用 jQuery 输入另一个 anchor

javascript - 使用 Javascript/JQuery 进行 XML/XSL 转换

javascript - 单击页面上的所有按钮,除非父级有特定类(class)

jquery - jquery 中的缓存选择器与链接选择器?

javascript - 附加到 tbody 时不显示表中的数据

html - Sendgrid 发送不带嵌入代码的 html 电子邮件