Javascript NodeJS中的双回调

Javascript NodeJS中的双回调,javascript,node.js,callback,Javascript,Node.js,Callback,我不知道为什么下面的代码会触发两次回调: request(url, function(error, response, html) { if(!error){ var $ = cheerio.load(html); $('.globleRank').filter(function(){ var data

我不知道为什么下面的代码会触发两次回调:

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文件

因此,写作发生了两次


请提供帮助。

可能有多个$'.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');
});

相反。

谢谢。这是由多种因素造成的。我需要第一个,所以修改了你的代码