[英]Why does setInterval not wait for specified time?
當我轉到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'); });
});
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.