当前位置: 首页 > 面试题库 >

setInterval在调用的函数中似乎不喜欢()。为什么?

杭镜
2023-03-14
问题内容

当我执行以下命令时,几秒钟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是/正在undefined某种程度上成为。有人可以解释为什么这是预期的行为(无论如何,我认为是这样)?

我可以很轻松地解决这个问题,但是我很好奇为什么它会这样工作-使得参数值的传递变得不那么方便,因为我无法在setInterval语句内部进行操作。


问题答案:

setInterval接受功能对象作为第一个参数。但是,当你这样做

setInterval(incidentController(123), 10 * 1000);

您传递的调用结果incidentControllerundefined(在JavaScript中,如果函数未显式返回任何内容,则默认情况下undefined将返回)。这就是为什么您得到错误

Cannot read property 'apply' of undefined

它正在尝试调用上的apply函数undefined

使得传递参数值的便利性降低了一些,因为我无法在setInterval语句本身内部进行传递

不,先生。您可以方便地将参数setInterval本身传递给回调函数,如下所示

setInterval(incidentController, 10 * 1000, 123);

现在,incidentController每10秒调用一次when时,123将作为第一个参数传递给它。



 类似资料:
  • 问题内容: 我有一个Rails控制器,它将一些模型渲染为json。 输出看起来像这样: 我尝试使用sencha / extjs来使用该服务: 而sencha只是不解析它。同时,它可以与Twitter等API调用一起使用。 有任何想法我做错了吗?或如何找到错误? 问题答案: 如果您正在执行JSONP请求,则需要将返回的JSON包装在GET请求中指定为参数的函数中,在这种情况下为“回调”。Sencha

  • 问题内容: 我有这样一行: Pylint显示警告: 这是为什么?列表理解是推荐的方法吗? 我当然可以这样重写: 而且我没有收到任何警告,但是我想知道是否为此有一个PEP? 问题答案: 皮林特(Pylint)经常谈论不该做的事情。您可以在.pylintrc文件中禁用警告。 此页面http://pylint-messages.wikidot.com/messages:w0141指示问题在于过滤器和映射

  • 好吧,我又回来了...另一个Selenium3.x/Geckodriver问题。 我目前有一个设置,通过browsermob-proxy路由所有来自selenium测试的网络流量,所以我的测试要求我给他们代理信息路由所有这些数据,以便以后我可以查询它。 尝试1:通过socks设置代理 此尝试将导致以下堆栈跟踪: 尝试2:通过JSON设置 它将产生以下堆栈跟踪: 用geckodriver和Selen

  • 我在PostgresQL中有一个表feed_item_likes_dislikes(feed_item_id,user_id,vote),其中 feed_item_id是uuid 用户id为整数 投票=正确那么这是一个类似 投票=FALSE那么这是一种厌恶 vote=NULL表示用户最初喜欢或不喜欢,但通过取消通知返回并删除了投票 我还有另一个表feed_item_likes_dislikes_a

  • 问题内容: 我的活动课在这里: 和相机预览类在这里: 但是,当我测试该类时,似乎首先调用onResume(),然后在1或2秒后再次调用。因此,相机必须再次刷新。如果我根本没有onResume(),则摄像头预览稳定,但是如果我从主屏幕或其他某个应用再次切换到该应用,则会崩溃。我发现onPause()不会影响任何一个。我的代码正确吗?我应该添加/删除哪些内容以使其不会再次刷新并且在应用切换后仍然不会崩