2017-08-18 154 views
0

我有一個node.js服務器和客戶端。客戶端有一個video.js播放器,progressbar.js和socket.io。我想要進度條顯示其他用戶的緩衝區百分比。每秒鐘定期調用node.js函數

這裏是一塊服務器源

function updateProgressBars() { 
    io.sockets.emit('updateProgressBars'); //Send data to everyone 
} 

socket.on('userProgressBarUpdate', 
    function(data) { 
    socket.broadcast.emit('changeLocalProgressBar', data); //Send data to everyone but not sender 
    }); 

這裏是客戶端

socket.on('updateProgressBars', 
function() { 
    var bufferLevel = myPlayer.bufferedPercent(); 
    var data = { 
    bl: bufferLevel, 
    n: name 
    } 

    socket.emit('userProgressBarUpdate', data); //Send data to server 
}); 

changeLocalProgressBarLevel只是改變在客戶端progressbars所以不要對此擔心。

我怎樣才能讓updateProgressBars()每秒被調用。

+1

可能重複[每60秒調用一次函數](https://stackoverflow.com/questions/3138756/calling-a-function-every-60-seconds) –

+1

[socket.io setinterval way] (https://stackoverflow.com/questions/9230647/socket-io-setinterval-way) – skymon

回答

0

使用setInterval是不是最好的choise,因爲你應該始終clearInterval。我更喜歡使用與藍鳥的承諾遞歸:

function a() 
{ 
    if(smthCompleted) 
    dosmth(); 
    else return Promise.delay(1000).then(() => a()); 
} 

這種方式,你有你的代碼更好的控制。

1

您可以通過使用f.e.實現此目的。 「setInterval」函數。

function doStuff() { 
    //do Stuff here 
} 
setInterval(doStuff, 1000); //time is in ms 

更妙的是:

let myVar = setInterval(function(){ timer() }, 1000); 

function timer() { 
//do stuff here 
} 

function stopFunction() { 
    clearInterval(myVar); 
} 
1

您可以使用setInterval(function(){ ... }, timeMiliSeconds)

setInterval(function(){ console.log("hi")},1000) //logs hi every second