2016-11-09 61 views
0

我有一個基於angularjs的webapp,它由ExpressJS + socket.io + Node後端補充。大部分數據流量都基於REST Web服務,除了一些實時圖表。當socket.on('連接')建立時,使用setInterval推送數據。這是代碼。Angular,socket.io和setInterval - 如何管理視圖更改

socket.on('connection', function(
    socket.on('handshake', function(socket) { 
     console.log("handshake data recieved", socket.id); 
     // restart(); 
     dashboardInterval = setInterval(function(){sendDashboardStats(socket, 'some');}, 5000); 
    }); 
}); 

即使UI /客戶端關閉了連接,它仍會繼續運行。更糟糕的是,在任何特定時間點可能會有很多用戶/客戶,那麼我們如何才能關閉這些時間間隔?

回答

0

你可以取消你想要的時間間隔,或者甚至當socket被斷開時,只需加上clearInterval(dashboardInterval);即可。

var dashboardInterval; 

socket.on('connection', function(
    socket.on('handshake', function(socket) { 
    console.log("handshake data recieved", socket.id); 
    // restart(); 
    dashboardInterval = setInterval(function() { 
     sendDashboardStats(socket, 'some'); 
    }, 5000); 
    }); 

    socket.on('disconnect', function() { 

    if (dashboardInterval) { 
     cancelInterval(dashboardInterval); 
    } 

    io.sockets.emit('user disconnected'); 
    }); 
});