为什么setInterval不等待指定的时间?

时间:2018-10-13 09:48:02

标签: javascript node.js socket.io

当我转到localhost:3000时,broadcast事件并不等待每3秒广播一次数据。它立即发送所有值。 理想情况下,它应该花费3*500 = 1500秒,但它会在2秒左右的时间内发出500个数据。

为什么会这样?

io.on('connection', function (socket) {
    console.log('New user connected');

    socket.on('createMessage', function (message) {
        console.log(message);
        io.emit('newMessage', { from: message.message, createdAt: new Date().getTime() });
    });

    setInterval(function(){
      socket.emit('broadcast', {message: track()} , 3000);
    });

    socket.on('disconnect', function () { console.log('Disconnected from client'); });
});

2 个答案:

答案 0 :(得分:1)

您的setInterval函数语法有误。使用这个,

setInterval(function(){
    socket.emit('broadcast', {message: track()});
}, 3000)

答案 1 :(得分:1)

您的代码中有两个问题,第一个问题是将interval时间参数发送到emit函数而不是setInterval,您可以通过编写来解决

setInterval(function(){
   socket.emit('broadcast', {message: track()}); // notice the 3000 is not here
}, 3000);

但是现在它产生了第二个问题,断开连接后会发生什么?间隔仍在每3000 MS执行一次,这是内存泄漏! 您还应该使间隔无效

const interval = setInterval(...);

socket.on('disconnect', function () {
 clearInterval(interval);
 console.log('Disconnected from client');
});