例如,当我在终端中写入node.js REPL时:
setTimeout(3);
它向我显示了这个错误:
timers.js:110
first._onTimeout();
^
TypeError: Property '_onTimeout' of object [object Object] is not a function
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
但是,有趣的是它打破了整个会话(而只是抛出错误)。
为什么会这样?
感谢。
PS:我知道我应该添加函数作为第一个参数。只是想知道为什么会破坏会话。
答案 0 :(得分:0)
当您使用setTimeout
或setImmediate
时,它会将您的callback
添加到事件队列,因为Node无法保证您的回调将在{{1 }}。由于n
不是一个函数,它无法触发,引发异常并在它完成返回执行范围之前退出,这就是它将杀死REPL的原因。
现在,由于回调将在调用脚本的执行范围内定义,因此提供回调和发生错误的情况不同。如果您的回调是抛出错误,它将在正确的范围内引发异常。请注意,Node并不像大多数浏览器那样支持回调arg的字符串。
对于如此低的超时,您最好使用3
,这对于性能和安全性要好得多,但您仍然会在顶层发现错误。
答案 1 :(得分:0)
你应该使用
setTimeout(function() {
console.log('This runs every minute');
}, 60000);
就像戴夫说的那样,setTimeout需要一个函数。 http://www.w3schools.com/jsref/met_win_settimeout.asp