首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Date.getTime在回调方面没有进展

Date.getTime在回调方面没有进展
EN

Stack Overflow用户
提问于 2013-09-17 08:33:05
回答 1查看 627关注 0票数 1

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

代码语言:javascript
复制
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()值是在创建回调时存储的,而不是在回调实际启动时更新的。

有人能在这里亮点光吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-17 09:01:25

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

代码语言:javascript
复制
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(),因为它们会创建新的对象。您不需要它们,它们甚至可能会减慢您的应用程序(取决于GC实现)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18844971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档