Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js:如何使用setInterval和clearInterval?_Node.js - Fatal编程技术网

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

node.js:如何使用setInterval和clearInterval?,node.js,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,

这是我在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中,它返回一个简单的整数

将间隔附加到现有用户对象时,例如:

user.intervalid = setInterval(test, 1000, 'room', 20);
我无法再清除间隔:

clearInterval(user.intervalid); // does not work
使用setInterval()

如果需要以指定的间隔重复执行代码块,该怎么办?为此,节点具有名为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秒执行一次,直到停止为止。希望这有帮助。

您可以在以下示例中使用“this”:

const dgram=require('dgram');
const message=Buffer.from('from raspberry pi 3');
const client=dgram.createSocket('udp4');
var计数=0;
函数intervalFunc(){
计数++;
发送(消息,3001,'localhost',(err)=>{
//client.close();
});
如果(计数='5'){
clearInterval(本);
}
}

setInterval(intervalFunc,1500)这让我抓到了。完全相同的场景,clearInterval根本不起作用

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

解决方案是删除此导入语句,该语句已偷偷插入:


从“计时器”导入{setInterval}

如果在创建
setInterval
计时器后需要类似JavaScript的间隔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

时有效,只要
user
与存储
setInterval
的返回值时使用的对象相同,就可以正常工作。换句话说,
user
不能同时被转换成JSON或从JSON转换过来。你说的“而在简单的Javascript中它返回一个简单的整数”是什么意思?Js返回int,nodejs返回objectOk,首先,您需要注意,
setInterval
调用缺少一个参数,因为调用的形式为:
setInterval(func,delay,[param1,param2,…)。其次,如果您的问题是无法清除间隔,则需要粘贴用户对象的代码以及修改
intervalid
对象的代码。请注意,在上述示例中,您不能使用箭头函数,因为“this”在箭头函数中不起作用。