setTimeout(number)导致中断node.js REPL

时间:2015-09-30 09:09:22

标签: javascript node.js read-eval-print-loop

例如,当我在终端中写入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:我知道我应该添加函数作为第一个参数。只是想知道为什么会破坏会话。

2 个答案:

答案 0 :(得分:0)

当您使用setTimeoutsetImmediate时,它会将您的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