NodeJS js:如何使用setInterval和clearInterval?

hfsqlsce  于 2022-12-12  发布在  Node.js
关注(0)|答案(6)|浏览(148)

这是我的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
nimxete2

nimxete21#

使用setInterval()

如果需要以指定的间隔重复执行代码块,该怎么办?为此,Node提供了名为setInterval()和clearInterval()的方法。setInterval()函数与setTimeout()非常相似,使用相同的参数,如回调函数、delay以及传递给回调函数的任何可选参数。
下面是setInterval()的一个简单示例:

var interval = setInterval(function(str1, str2) {
  console.log(str1 + " " + str2);
}, 1000, "Hello.", "How are you?");

clearInterval(interval);

这是每分钟只运行一个时间间隔的另一种方法

function intervalFunc() {
    console.log("Hello!!!!");
     }
    setInterval(intervalFunc,1500);

在上面的例子中,intervalFunc()大约每1500毫秒或1.5秒执行一次,直到它停止。希望这能有所帮助。

uqjltbpv

uqjltbpv2#

您可以在下列范例中使用**“this”**:

const dgram = require('dgram');
const message = Buffer.from('from raspberry pi 3');
const client = dgram.createSocket('udp4');
var count = 0;

function intervalFunc() {
  count++;
  client.send(message, 3001, 'localhost', (err) => {
    //client.close();
  });
  if (count == '5') {
    clearInterval(this);
  }
}
setInterval(intervalFunc, 1500);
vh0rcniy

vh0rcniy3#

如果在创建setInterval计时器后需要类似JavaScript的interval ID,可以执行以下操作,

function callbackFunc() {
  console.log("I'm just an example callback function");
}

const timeoutObj = setInterval(callbackFunc, 1000);
const intervalId = timeoutObj[Symbol.toPrimitive](); //intervalId is an interger

// Later you can clear the timer by calling clearInterval with the intervalId like,
clearInterval(intervalId);

注意:只有当您的节点版本〉= v12.19.0时,这才有效。

pftdvrlh

pftdvrlh4#

这正好抓住了我。完全相同的场景,clearInterval根本不起作用。
在控制台中查看,setInterval的结果是一个对象,而不是数字。我相当困惑。
解决方案是删除这个导入语句,它已经潜入:
import { setInterval } from 'timers';

xienkqul

xienkqul5#

setInterval()将一个函数参数作为第二个参数,该参数将以给定的毫秒延迟运行无限次。

setInterval(()=> {
  console.log('Every 1 second');
},1000)
console.log('I will run first');

如何使用clearInterval()

var xyz = setInterval(()=> {
  console.log('Every 1 second');
},1000)
console.log('I will run first');

clearInterval(xyz);
gv8xihay

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

相关问题