setInterval 似乎不喜欢它调用的函数中的 () 。为什么?
setInterval doesn't seem to like () in the function it invokes. Why?
当我执行以下命令时,incidentController
在 10
秒后被调用并且每隔 10
秒继续执行没有问题:
// This works fine in nodejs v0.11.13
setInterval(incidentController, 10 * 1000);
function incidentController () {
console.log ('executed');
}
但是,这 立即执行 并在第二次迭代时抛出以下错误:
//This doesn't. The parens which wrap (123) cause the error.
setInterval(incidentController(123), 10 * 1000);
function incidentController (someInt) {
console.log ('executed: ', someInt);
}
错误:
timers.js:287
callback.apply(this, args);
^
TypeError: Cannot read property 'apply' of undefined
at wrapper [as _onTimeout] (timers.js:287:13)
at Timer.listOnTimeout (timers.js:133:15)
好像incidentController
is/becomesundefined
不知何故。有人可以解释为什么这是预期的行为(无论如何我认为是)?
我可以很容易地解决这个问题,但我只是很好奇为什么它会这样——使得传递参数值不太方便,因为我不能在 setInterval
语句中这样做本身。
setInterval
接受一个函数对象作为第一个参数。但是,当你这样做时
setInterval(incidentController(123), 10 * 1000);
您正在传递调用 incidentController
的结果,即 undefined
(在 JavaScript 中,如果函数没有 return 任何明确的内容,则默认情况下, undefined
将被 returned)。这就是您收到错误
的原因
Cannot read property 'apply' of undefined
它正在尝试调用 undefined
上的 apply
函数。
makes passing in parameter values a bit less convenient since I can't do it inside the setInterval
statement itself
不,先生。可以方便的在setInterval
本身给回调函数传参,像这样
setInterval(incidentController, 10 * 1000, 123);
现在,当调用 incidentController
时,每隔 10 秒,123
将作为第一个参数传递给它。
使用setInterval
like
是不正确的
setInterval(incidentController(123), 10 * 1000);
因为它需要一个函数作为第一个参数(而不是一个带有结果的执行函数)。
如果您希望将参数传递给回调,您应该使用匿名函数包装函数调用,例如
setInterval(function(){incidentController(123)}, 10 * 1000);
见Pass parameters in setInterval function
当我执行以下命令时,incidentController
在 10
秒后被调用并且每隔 10
秒继续执行没有问题:
// This works fine in nodejs v0.11.13
setInterval(incidentController, 10 * 1000);
function incidentController () {
console.log ('executed');
}
但是,这 立即执行 并在第二次迭代时抛出以下错误:
//This doesn't. The parens which wrap (123) cause the error.
setInterval(incidentController(123), 10 * 1000);
function incidentController (someInt) {
console.log ('executed: ', someInt);
}
错误:
timers.js:287
callback.apply(this, args);
^
TypeError: Cannot read property 'apply' of undefined
at wrapper [as _onTimeout] (timers.js:287:13)
at Timer.listOnTimeout (timers.js:133:15)
好像incidentController
is/becomesundefined
不知何故。有人可以解释为什么这是预期的行为(无论如何我认为是)?
我可以很容易地解决这个问题,但我只是很好奇为什么它会这样——使得传递参数值不太方便,因为我不能在 setInterval
语句中这样做本身。
setInterval
接受一个函数对象作为第一个参数。但是,当你这样做时
setInterval(incidentController(123), 10 * 1000);
您正在传递调用 incidentController
的结果,即 undefined
(在 JavaScript 中,如果函数没有 return 任何明确的内容,则默认情况下, undefined
将被 returned)。这就是您收到错误
Cannot read property 'apply' of undefined
它正在尝试调用 undefined
上的 apply
函数。
makes passing in parameter values a bit less convenient since I can't do it inside the
setInterval
statement itself
不,先生。可以方便的在setInterval
本身给回调函数传参,像这样
setInterval(incidentController, 10 * 1000, 123);
现在,当调用 incidentController
时,每隔 10 秒,123
将作为第一个参数传递给它。
使用setInterval
like
setInterval(incidentController(123), 10 * 1000);
因为它需要一个函数作为第一个参数(而不是一个带有结果的执行函数)。
如果您希望将参数传递给回调,您应该使用匿名函数包装函数调用,例如
setInterval(function(){incidentController(123)}, 10 * 1000);
见Pass parameters in setInterval function