Node.js crashes when using long interval in setint

2019-01-23 11:35发布

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

setInterval(createSasTokenTimer, 3000000);

I run this code and after 50 minutes I get the following error:

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)

When the interval time is shorter (2000000 for example), everything works fine.

Is this a bug in Node.js?


Update:

OS: Windows, Node.js version: 0.12.4

When I run only the code above it works fine, but it does break when it's inside my application, I can't point to which part of my code breaks it as it's very lengthy and nothing looks "suspicious". Anyway, when the interval is shorter it works as I wrote.

2条回答
乱世女痞
2楼-- · 2019-01-23 11:45

To me this looks like a non standard modual that you are using instead of the native modual. Look at global.process.moduleLoadList it should have the entries

 'NativeModule timers',
 'Binding timer_wrap',

And check your code that you are not importing 3rd party timers.js

查看更多
Emotional °昔
3楼-- · 2019-01-23 11:59

Instead of calling the Function Directly give it inside a callback.

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

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

Using this method, you are passing an anonymous function to setInterval. It will call this function once per interval, which is 3000000 miliseconds in this example.

For now, you can probably just use this code. For further understanding, I suggest researching anonymous functions and closures.

Hope this helps.

查看更多
登录 后发表回答