setInterval в функции слушателя - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть функция прослушивания, которая срабатывает каждую секунду, вы можете думать, что это функция метаданных видео

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 голосов
/ 29 ноября 2018

Другое возможное решение.Просто идея:

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

Если нет одноразового прослушивателя событий, вы можете его создать.

Что происходит здесь: каждые 120 секунд вы создаете прослушиватель событий.В следующую секунду он даст вам скорость и удалится сам.

0 голосов
/ 29 ноября 2018

Если событие 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.

...