我不确定为什么下面这段代码会回拨两次:
request(url, function(error, response, html) {
if(!error){
var $ = cheerio.load(html);
$('.globleRank').filter(function(){
var data = $(this);
rank_global = .children().first().text().trim();
json.rank_global = rank_global;
})
url = 'http://www.trafficestimate.com/www.'+site;
request(url, function(error, response, html) {
if(!error){
var $ = cheerio.load(html);
$('.chart-yoy span').filter(function(){
var visits = $(this).children().first().text();
json.visits = visits;
dat[site].push(json);
fs.writeFile(country_inp, JSON.stringify(dat, null, 4), function(err){
console.log('Data successfully written for '+site+'! - Check your project directory for the '+country_inp+' file');
})
})
}
});
}
});
控制台输出是:
为Go.com成功编写数据! - 检查项目目录中的US文件 为Go.com成功编写数据! - 检查项目目录中的US文件
因此写入发生了两次。
请帮忙。
答案 0 :(得分:0)
可能有多个$('.chart-yoy span')
元素,这会使.filter()
回调多次执行。
也许你想做
var $ = cheerio.load(html);
$('.chart-yoy span').each(function () {
var visits = $(this).children().first().text();
json.visits = visits;
dat[site].push(json);
});
fs.writeFile(country_inp, JSON.stringify(dat, null, 4), function (err) {
console.log('Data successfully written for ' + site + '! - Check your project directory for the ' + country_inp + ' file');
});
代替。