侦听器函数中的setInterval

时间:2018-11-29 00:59:05

标签: javascript ecmascript-6 setinterval

我有一个每秒触发一次的监听器功能,您可以认为这是视频元数据功能

video.on('media_info', function(data){
   //I want to get the speed and switch video quality, I can get the speed by accessing data.speed
})

如何在这里使用setInterval?我想每2分钟执行一次逻辑,而不是每秒钟执行一次,我假设如果将其放在正文中,则会使setInterval触发器更加频繁

  const switchQuality = speed => {
    if(speed > 300) { switch to high quality }
    if(speed > 150) { switch to medium quality }
  };

  setInterval(() => switchQuality(speed), 120000);

2 个答案:

答案 0 :(得分:0)

如果每秒触发media_info事件,为什么不简单地添加一个计数器变量并每次运行您的逻辑,则计数器达到120(或该数字可除而不休息)?

var counter = 0;

media.on('media_info', data => {
  counter += 1;
  if (counter % 120 === 0) {
    switchQuality(data.speed);
  }
});

或者:

var counter = 0;

media.on('media_info', data => {
  counter += 1;
  if (counter >= 120) {
    counter = 0;
    switchQuality(data.speed);
  }
});

那么就不需要使用setIntervalsetTimeout

答案 1 :(得分:0)

另一种可能的解决方案。只是一个想法:

setInterval(() => {
  video.once('media_info', function(data) {
    if(data.speed > 300) { switch to high quality }
    if(data.speed > 150) { switch to medium quality }
  })
});

如果没有一次性事件侦听器,则可以创建它。

这里发生的情况:每120秒创建一个事件侦听器。下一秒钟,它将为您提供速度并自行删除。