簡體   English   中英

為什么setInterval不等待指定的時間?

[英]Why does setInterval not wait for specified time?

當我轉到localhost:3000broadcast事件不等待每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'); });
});

setInterval函數語法中存在錯誤。 用這個,

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

您的代碼中有兩個問題,第一個是您將interval time參數發送到send函數而不是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');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM