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

setTimeout(number) cause breaking node.js REPL

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

当您使用 setTimeoutsetImmediate 时,它会将您的 callback 添加到事件队列中,因为 Node 无法保证您的回调将在 [=13] 中准确触发=].由于 3 不是函数,它无法触发,引发异常并在完成返回到您的执行范围之前退出,这就是它会终止 REPL 的原因。

现在,这与提供回调和在那里发生错误不同,因为回调将在调用脚本的执行范围内定义。如果您的回调要抛出错误,它将在正确的范围内引发异常。请注意,Node 不像大多数浏览器那样支持回调 arg 的字符串。

对于如此低的超时,您最好使用 process.nextTick(callback),这对于性能和安全性来说要好得多,但您仍然会在顶层看到一个错误。

你应该使用

    setTimeout(function() {
     console.log('This runs every minute');
    }, 60000);

正如 Dave 所说,setTimeout 需要一个函数。 http://www.w3schools.com/jsref/met_win_settimeout.asp