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

在setinterval中使用长间隔时,Node.js崩溃

尉迟宇定
2023-03-14
问题内容
function createSasTokenTimer() {    
    console.log("Hello");
}

setInterval(createSasTokenTimer, 3000000);

我运行此代码,并在50分钟后收到以下错误:

Hello
timers.js:265
    callback.apply(this, args);
            ^
TypeError: Cannot read property 'apply' of undefined

    at wrapper [as _onTimeout] (timers.js:265:13)
    at Timer.listOnTimeout (timers.js:110:15)

当间隔时间较短时(例如 2000000 ),一切正常。

这是Node.js中的错误吗?

更新:

操作系统:Windows,Node.js版本:0.12.4

当我只运行上面的代码时,它可以正常工作,但是当它在我的应用程序中时,它确实会中断,我无法指出代码的哪一部分会中断它,因为它很长,而且看起来没有“可疑”。无论如何,当间隔更短时,它就像我写的那样工作。


问题答案:

而不是直接调用该函数,而是在回调内部提供它。

function createSasTokenTimer() {    
  console.log("Hello");
}

setInterval(function(){
 createSasTokenTimer();
}, 3000000);

使用此方法,您正在将匿名函数传递给setInterval。它将每个间隔调用一次此函数,在此示例中为3000000毫秒。

现在,您可能仅可以使用此代码。为了进一步理解,我建议研究匿名函数和闭包。

希望这可以帮助。



 类似资料:
  • 问题内容: 我正在学习node.js,只是设置了一个空的Linux虚拟机并安装了节点。 我每分钟都在不断运行功能 并考虑根据当前时间添加其他功能。-(例如,如果dateTime =中午星期日,则运行功能) 我的问题是,与传统的cron作业设置相比,运行这样的设置是否有任何缺点? 请记住,无论如何,我必须每分钟在节点中运行一次此功能。 问题答案: 这取决于您必须严格遵守该分钟间隔,以及节点脚本在此期

  • 问题内容: 我将Node.js与MongoDB结合使用,也将Monk用于数据库访问。我有以下代码: 关于此代码,我有两个问题: 我看到执行时间,并且“文件已保存!” 首先输入字符串,然后在控制台中看到朋友的名字。这是为什么?我不应该先看名字然后再看执行时间吗?是否因为Node.js的异步特性? 名称在控制台中的打印速度非常慢,速度就像两秒钟内出现一个名称一样。为什么这么慢?有没有办法使过程更快?

  • 问题内容: 我已经编写了一个JavaScript函数,该函数使用setInterval每隔十分之一秒的时间对字符串进行一定次数的迭代。 我不想将间隔设置为特定的数字,而是希望每次运行时都基于一个计数器对其进行更新。所以代替: 就像这样: 不幸的是,那没有用。似乎“ 10 *计数器”等于0。 因此,如何在每次匿名函数运行时调整时间间隔? 问题答案: 使用代替。然后,回调将负责引发下一个超时,此时您可

  • 问题内容: 我正在用node.js编写游戏服务器,某些操作涉及服务器部分的大量计算。在运行这些计算时,我不想停止接受连接- 当node.js不支持线程时,如何在后台运行它们? 问题答案: 我个人不能保证任何一种,但是如果您热衷于进行工作,那么节点模块页面上列出了针对节点的WebWorkers API的几个独立实现。 : http://github.com/cramforce/node-worker

  • 问题内容: 我正在阅读官方React网站上的教程。在有关生命周期方法的示例中,在componentDidMount方法下,将timerID设置为setInterval函数。 我的问题是,即使timerID已初始化,也从未在整个应用程序中调用过,在不显式调用应用程序中任何地方的timerID的情况下,应用程序如何工作。这是下面的代码。 问题答案: 是一个非零的数字值,它标识对的调用所创建的计时器。该

  • 问题内容: 我在这里找到执行跟踪任务的最惯用的方法。 任务 : 将数据从通道写入文件。 问题 : 我有一个频道 我需要从通道读取并将从通道读取的值写入文件。我的问题基本上是鉴于 如果通道已满,请立即写入值 如果通道未满,则每5s写一次。 因此,从本质上讲,至少需要每5s将数据写入文件一次(假设至少每5s将数据填充到通道中一次) 请告诉我用最好的方式,并做到我上面的任务吗? 谢谢! 问题答案: 没有