我有一个每秒触发一次的监听器功能,您可以认为这是视频元数据功能
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);
答案 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);
}
});
那么就不需要使用setInterval
或setTimeout
。
答案 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秒创建一个事件侦听器。下一秒钟,它将为您提供速度并自行删除。