Изменение задержки интервала AngularJS $ в зависимости от времени

#angularjs #setinterval

#angularjs #setinterval

Вопрос:

Я пытаюсь изменить задержку интервала в зависимости от времени суток. Каждые 30 минут я хотел бы автоматически (и случайным образом) запускать сообщение в блоге из предопределенного списка без запуска события пользовательского интерфейса. Однако ночью я хотел бы замедлить нажатие (изменение задержки), чтобы не «засорять» пользовательский интерфейс. Мой код:

 var campaign_post_ids = [
  // some array
];
var today = new Date();
var hourNow = today.getHours();
var stop = $interval(function() {
}, 100);

function pushBlog(blog_id) {
  blog_id = campaign_post_ids[Math.floor(Math.random() * campaign_post_ids.length)];
  Blog.push_up(blog_id); //calling the push_up function in the Blog service
}

if (hourNow > 9 amp;amp; hourNow < 23) {
  $interval.cancel(stop);
  $interval(pushBlog, 60000 * 30); //every 30 minutes
} else {
  $interval.cancel(stop);
  $interval(pushBlog, 60000 * 120); //every 120 minutes
}
  

Нажатие работает нормально, однако изменение задержки не работает; в течение ночи оно продолжает увеличиваться каждые 30 минут (вместо 120 минут). Что я делаю не так?

Ответ №1:

Во-первых, вы упускаете часть отмены интервала. Чтобы отменить интервал, вы должны объявить его как переменную и использовать в качестве аргумента $interval.cancel() .

например:

 var stop = $interval(function() {
  console.log('running')
}, 100);

$interval.cancel(stop)
  

Также, когда часы равны 9 или 23, интервал вообще не будет выполняться с использованием этого кода. Это сделано специально? Возможно, вы захотите удалить else if блок и просто очистить любой предыдущий интервал перед инициализацией нового. В документах Angular есть хорошие примеры этого: $interval docs

Комментарии:

1. Ах, да, объявление отмены интервала имеет смысл … спасибо за это!

2. Нужно ли вообще очищать интервал $? Я где-то читал, что никогда не будет выполняться 2 интервала одновременно?

3. У вас может быть столько интервалов, сколько вы хотите, в vanillja js и реализации angular. Пример: jsfiddle.net/57nn8xrz

4. Очистить! Большое спасибо за вашу помощь в этом.