所以,我正在 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() 值是在创建回调时存储的,而不是在它们实际触发时更新。
任何人都可以在这里阐明一下吗?