Javascript Node.js在setinterval中使用长间隔时崩溃

Javascript Node.js在setinterval中使用长间隔时崩溃,javascript,node.js,setinterval,Javascript,Node.js,Setinterval,我运行此代码,50分钟后出现以下错误: function createSasTokenTimer() { console.log("Hello"); } setInterval(createSasTokenTimer, 3000000); 当间隔时间较短时(例如,2000000),一切正常 这是Node.js中的错误吗 更新: 操作系统:Windows,Node.js版本:0.12.4 当我只运行上面的代码时,它工作正常,但当它在我的应用程序中时,它确实会中断,我无法指出我

我运行此代码,50分钟后出现以下错误:

function createSasTokenTimer() {    
    console.log("Hello");
}

setInterval(createSasTokenTimer, 3000000);
当间隔时间较短时(例如,2000000),一切正常

这是Node.js中的错误吗


更新:

操作系统:
Windows
,Node.js版本:
0.12.4


当我只运行上面的代码时,它工作正常,但当它在我的应用程序中时,它确实会中断,我无法指出我的代码的哪一部分会中断它,因为它非常长,而且没有任何东西看起来“可疑”。不管怎样,当间隔较短时,它就像我写的那样工作。

对我来说,这看起来像是一个非标准的模态,您正在使用它,而不是本机模态。查看
global.process.moduleLoadList
它应该有条目

Hello
timers.js:265
    callback.apply(this, args);
            ^
TypeError: Cannot read property 'apply' of undefined

    at wrapper [as _onTimeout] (timers.js:265:13)
    at Timer.listOnTimeout (timers.js:110:15)

并检查您的代码,确保您没有导入第三方timers.js,而不是直接调用该函数,并在回调中给予它

 'NativeModule timers',
 'Binding timer_wrap',
使用此方法,您将向setInterval传递一个匿名函数。它将每间隔调用此函数一次,在本例中为3000000毫秒

现在,您可能只需要使用这段代码。为了进一步理解,我建议研究匿名函数和闭包


希望这有帮助。

看起来TaskQueue在一定时间后使回调无效。我会来找证据来证明这个假设,并写一个答案。顺便说一句,观察得很好。@janiv这是唯一运行的代码吗?@janiv我已经测试了代码,它似乎可以工作。这是唯一运行的东西吗?比如,函数有可能是未定义的吗?它看起来像是在本地C++绑定和V8垃圾收集器之间的交互中的一个bug。通过保持setInterval返回的对象,可以很容易地解决这个问题。我正在深入研究setTimeout的.Node.js实现,setInterval返回一个对象。浏览器返回一个整数。我没有导入第三方timers.js。我应该在哪里查找NativeModule和Binding?您能解释一下为什么它有用吗?我和贾尼夫谈过,他确认你的回答解决了他的问题。我对javascript中的异步编程非常熟悉,但仍然不知道
setInterval(funcName,delay)
setInterval(function(){funcName()},delay)
之间有什么区别,至少在浏览器的javascript中它们是一样的。即使有效,这个答案也是错误的。这个解释完全没有更新过Kurchatkin你能给我解释一下答案吗?我不能。这可能是v8中的一个bug。
function createSasTokenTimer() {    
  console.log("Hello");
}

setInterval(function(){
 createSasTokenTimer();
}, 3000000);