每秒定期调用node.js函数

时间:2017-08-18 09:03:15

标签: javascript node.js socket.io

我有一个node.js服务器和客户端。客户端有一个video.js播放器,progressbar.js和socket.io。我希望progressbars显示其他用户的缓冲区百分比。

这是一段服务器来源

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只是在客户端更改进度条,所以不用担心。

如何每秒调用updateProgressBars()

3 个答案:

答案 0 :(得分:4)

你可以通过使用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 :(得分:1)

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

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

答案 2 :(得分:0)

使用setInterval不是最佳选择,因为您应始终clearInterval。我更喜欢使用bluebird promises的递归:

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

通过这种方式,您可以更好地控制代码。