[英]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.