这是我的JS在nodeJS:
function test(a, room, seconds) {
console.log(a, room, seconds);
}
intervalid = setInterval(test, 1000, 'room', 20);
console.log('intervalid', intervalid);
它会传回输出:
intervalid Timeout {
_called: false,
_idleTimeout: 1000,
_idlePrev: TimersList {
_idleNext: [Circular],
_idlePrev: [Circular],
_timer: Timer { '0': [Function: listOnTimeout], _list: [Circular] },
_unrefed: false,
msecs: 1000,
nextTick: false
},
_idleNext: TimersList {
_idleNext: [Circular],
_idlePrev: [Circular],
_timer: Timer { '0': [Function: listOnTimeout], _list: [Circular] },
_unrefed: false,
msecs: 1000,
nextTick: false
},
_idleStart: 377,
_onTimeout: [Function: test],
_timerArgs: [ 'room', 20 ],
_repeat: 1000
}
而在简单的Javascript中,它会传回简单的INTEGER数字
当我将间隔附加到一个现有的用户对象时,例如:
user.intervalid = setInterval(test, 1000, 'room', 20);
我无法再清除Interval:
clearInterval(user.intervalid); // does not work
6条答案
按热度按时间nimxete21#
使用setInterval()
如果需要以指定的间隔重复执行代码块,该怎么办?为此,Node提供了名为setInterval()和clearInterval()的方法。setInterval()函数与setTimeout()非常相似,使用相同的参数,如回调函数、delay以及传递给回调函数的任何可选参数。
下面是setInterval()的一个简单示例:
这是每分钟只运行一个时间间隔的另一种方法
在上面的例子中,intervalFunc()大约每1500毫秒或1.5秒执行一次,直到它停止。希望这能有所帮助。
uqjltbpv2#
您可以在下列范例中使用**“this”**:
vh0rcniy3#
如果在创建
setInterval
计时器后需要类似JavaScript的interval ID,可以执行以下操作,注意:只有当您的节点版本〉=
v12.19.0
时,这才有效。pftdvrlh4#
这正好抓住了我。完全相同的场景,clearInterval根本不起作用。
在控制台中查看,setInterval的结果是一个对象,而不是数字。我相当困惑。
解决方案是删除这个导入语句,它已经潜入:
import { setInterval } from 'timers';
xienkqul5#
setInterval()
将一个函数参数作为第二个参数,该参数将以给定的毫秒延迟运行无限次。如何使用
clearInterval()
:gv8xihay6#
我对这些功能的理解是:任务:每5秒给予一次,20秒后停止。
setInterval(clap_your_hands,5 seconds)
:我们基本上是告诉做什么,就是每5秒拍一次clearInterval(stop_clapping)
:我们基本上是告诉清除我们正在做什么,停止鼓掌任务,什么也不做。上面的答案都谈到了这两个软件包,但是有一个很大的缺陷。它们没有告诉何时停止。下面是我们执行上面的答案时看到的结果。记住,一个接一个地执行这两个代码,它发生得如此之快,以至于我们根本看不到任何输出。这就像说拍手和停止在同一时间。最终结果是,我们根本听不到拍手声。
setTimeout(doSomething_JustOnce_AfterThisTime,20seconds)
:我们基本上是在20秒后告诉做某件事一次,在上面使用这个包的结果是:在这里,我们被告知等待20秒,这就是原因,我们看到20秒的输出。在这种情况下,控制台显示
room 20 undefined
打印到控制台。Undefined
因为test
函数期望三个输入,但只给出了两个,函数声明第三个为undefined
。