每秒定时调用 node.js 函数

12
我有一个Node.js服务器和客户端。客户端有一个video.js播放器、 progressbar.js和socket.io。我希望进度条显示其他用户的缓冲区百分比。 这是服务器源码的一部分。
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() 每秒钟被调用一次。


1
可能是每60秒调用一个函数的重复问题。 - t.niese
1
可能是 socket.io setinterval way 的重复问题。 - skymon
3个回答

13
你可以使用 setInterval(function(){ ... }, timeMiliSeconds)
setInterval(function(){ console.log("hi")},1000) //logs hi every second

7

使用 setInterval 不是最好的选择,因为你应该总是使用 clearInterval。我更喜欢使用蓝鸟承诺递归:

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

这样做可以更好地控制您的代码。

现在我在使用函数a时遇到了问题。这里有一个例子供全世界参考:function run() { a().catch(() => console.log('error'))}。run函数调用了a函数。对于每个Promise的then调用,都应该编写一个catch - Melroy van den Berg

5
你可以使用“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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接