#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. Очистить! Большое спасибо за вашу помощь в этом.