繁体   English   中英

Date.getTime没有在回调中前进

[英]Date.getTime not advancing in callbacks

因此,我在Node中编写了一个页面抓取器,并且在一组回调中从Date.getTime获得了奇怪的行为。

function projectScrape(urlList){
        urlList.forEach(function(frag){
                request(frag.url, (function(frag){
                        return function(err, resp, body){
                                if(err) console.log('error: ' + err);
                                project$ = cheerio.load(body);
                                var tempRecord = {
                                        name: frag.name,
                                        funding: project$('span.monthly_funding_goal_percentage').text($
                                        subs: project$('span.number_of_subscribers').text(),
                                        timestamp: myDate.getTime()
                                        };
                                console.log(tempRecord);
                        }
                })(frag));
        });
};

抓取效果很好,我从网站上获得了一系列控制台转储。 但是,它们的时间戳都相同。 回调显然不会同时完成(有时在两次回调响应之间可能要花费几秒钟的时间)-那么为什么要将它们加上时间戳记为相同的毫秒数?

我在这里缺少有关函数作用域的信息吗? 如我所见,即使所有回调都引用相同的Date.getTime()实例,控制台转储也应将时间戳冻结为各个回调返回时的时间戳。

我能想到的唯一解释是,在创建回调时将存储Date.getTime()值,而在实际触发时不会更新。

谁能在这里阐明一些想法?

如果要使用当前时间戳记,请使用Date.now() ,而不要使用固定日期的.getTime() 除非您以任何方式修改myDate ,否则它将始终引用相同的时间和日期,因此.getTime()将始终返回相同的值:

var tempRecord = {
  name: frag.name,
  funding: project$('span.monthly_funding_goal_percentage').text(/* ... */),
  subs: project$('span.number_of_subscribers').text(),
  timestamp: Date.now() // <---------
};

不要使用(new Date()).getTime()var myTempDate = new Date(); return myTempDate.getTime() var myTempDate = new Date(); return myTempDate.getTime()因为它们将创建新对象。 您不需要它们,它们甚至可能使您的应用程序变慢(取决于GC的实现)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM