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

时间:2016-09-30 13:30:04

标签: javascript node.js momentjs

在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(在撰写本文时)。 / p>

1 个答案:

答案 0 :(得分:1)

您每两秒钟一次递归checkTheDay功能一次。在足够长的时间内,你将耗尽调用堆栈。

使用setInterval代替setTimeout,然后您无需递归。

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

checkTheDay();

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

第一次迭代:

First Iteration

第二次迭代:

Second Iteration

第三次迭代:

Third Iteration

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