繁体   English   中英

使用moment.js检查当前日期不会在新的一天更新

[英]Checking the current day with moment.js does not update on new day

在Node应用程序中,我有一个每30秒运行一次的功能。

它使用moment().day()打印到控制台。 我让它运行一整夜,并期望它注意到现在是5而不是4表示现在是星期五而不是星期四。 今天早上我检查时,它继续打印4 为什么会这样呢?

这是一个jsfiddle https://jsfiddle.net/9ya2auzy/2/

function checkTheDay(){
    setTimeout(function(){
    document.getElementById("out").innerHTML = moment().day(); 
    checkTheDay();
  }, 2000);
}

checkTheDay();

它将每2秒输出一天。 如果该页面保持打开状态,则应整夜运行,然后打印下一个数字6 (在撰写本文时),而不是当前输出5 (在撰写本文时)。

您每两秒钟checkTheDay一次进入checkTheDay函数。 在足够长的时间内,您将耗尽整个调用堆栈。

使用setInterval而不是setTimeout ,则无需递归。

function checkTheDay(){
    setInterval(function(){
    document.getElementById("out").innerHTML = moment().day(); 
  }, 2000);
}

checkTheDay();

通过使用Chrome调试器,设置断点并查看调用堆栈,您可以看到堆栈在原始小提琴中增长的效果(在以下屏幕截图的右上方)。

第一次迭代:

第一次迭代

第二次迭代:

第二次迭代

第三次迭代:

第三次迭代

如您所见,调用堆栈在增长。 如果不加以检查,它将失去控制,直到变得无响应或引发错误。

暂无
暂无

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

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