【问题标题】:Periodically call node.js function every second每秒定期调用 node.js 函数
【发布时间】:2018-01-26 21:46:08
【问题描述】:

我有一个 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() 每秒被调用一次。

【问题讨论】:

标签: javascript node.js socket.io


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我现在错过了函数 a 的使用。世界其他地方有一个例子:function run() { a().catch(() => console.log('error'))。 run 函数调用 a 函数。对于每个 Promose then 电话,您应该写一个 catch
    【解决方案3】:

    您可以通过使用 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-29
      • 2011-11-06
      • 2011-03-09
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      相关资源
      最近更新 更多