【问题标题】:TypeError thrown by setInterval using node.js'ssetInterval 使用 node.js 抛出的 TypeError
【发布时间】:2018-06-27 16:13:42
【问题描述】:

我是 NodeJS 的新手,我正在运行一个微服务,我想在没有浏览器的情况下打开一个网页,每 20 秒发出一次客户端 api 请求。我正在尝试使用包 openurl

const openPage = require("openurl");

function openUpPage(url){
  openPage.open(url);
}

setInterval(openUpPage("myURl"), 20000);

但是,当调用 setInterval(...) 时,我被返回“TypeError:“callback”参数必须是一个函数”。

知道我是如何使用 setInterval 完成此任务的吗?

【问题讨论】:

  • 你在哪里得到错误?我假设在 openUpPage 函数内部?
  • 您正在执行 openUpPage("myURl") 并将其返回的内容设置为 setInterval。由于它不返回任何内容,因此您的电话基本上是。 setInterval(undefined, 20000); 与问题无关,但您的代码不会按间隔运行。
  • @Luca openopenurl 包中的实现声明回调是可选的。所以我假设错误发生在setInverval

标签: javascript node.js callback setinterval


【解决方案1】:

您需要将回调传递给setInterval,而不是立即使用匿名箭头函数调用您的函数。

setInterval(() => openUpPage("myURl"), 20000);

箭头功能不是必须的。

setInterval(function() { openUpPage("myURl") }, 20000);

测试时我发现setInverval 抛出的错误"TypeError: "callback" argument must be a function" 与node.js 有关。问题中的代码 sn-p 在 codepen 中运行没有任何错误(使用 Chrome)。

这是因为纯javascript由于缺乏底层支持而无法实现这种定时器相关的功能。因此,浏览器和 node.js 不一定共享文档中看到的相同实现。

即使在问题 sn-p 中看到的立即调用函数与setInterval 结合使用,无论实现如何都是毫无意义的。

【讨论】:

  • @epascarello 基于发布的 sn-p setInterval 是唯一可能导致此错误的调​​用,不是吗? openurl 包中的 open 实现声明回调是可选的。编辑:删除了最初的评论!
  • 嗨大卫,感谢您的回复我已经尝试过您的代码,但我仍然收到错误 events.js:183 throw er; // 未处理的“错误”事件错误:在 onErrorNT (internal/child_process) 的 Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) 的 _errnoException (util.js:1022:11) 处生成 xdg-open ENOENT .js:372:16) 在 _combinedTickCallback (internal/process/next_tick.js:138:11) 在 process._tickCallback (internal/process/next_tick.js:180:9)
  • @Daniel 看起来像是由 node.js 的 child_process 包引起的。没有任何代码,很难说出原因。但看起来setInterval 并不是这个问题。所以我认为最初的问题已经解决,因此您应该创建另一个问题。
猜你喜欢
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 2021-11-19
  • 2011-10-03
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多