node.js:如何使用setInterval和clearInterval?

时间:2017-10-05 15:07:18

标签: node.js

这是我在nodeJS中的JS:

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);

我无法再使用clearInterval:

clearInterval(user.intervalid); // does not work

5 个答案:

答案 0 :(得分:13)

使用setInterval()

如果您需要按指定的时间间隔重复执行代码块,该怎么办?为此,Node具有名为setInterval()和clearInterval()的方法。 setInterval()函数非常类似于setTimeout(),使用相同的参数,例如回调函数,延迟和任何可选参数,以传递给回调函数。

下面显示了一个简单的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秒执行一次,直到它停止。希望这会有所帮助。

答案 1 :(得分:1)

您可以在以下示例中使用" 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);




答案 2 :(得分:1)

如果您在创建 setInterval 计时器后想要一个类似于间隔 ID 的 JavaScript,您可以执行以下操作,

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 时有效。

答案 3 :(得分:0)

这抓到了我。完全一样的情况,clearInterval根本不起作用。

在控制台中,setInterval的结果是一个对象,而不是数字。我很困惑。

解决方案是删除此导入语句,该语句已隐藏在其中:

dynamic_cast

答案 4 :(得分:0)

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);