Избегайте выполнения setInterval() в начале интервала
Я заметил, что функция setInterval() на самом деле запускается (например, принимает значения) в начале интервала, затем ждет и возвращает результат в конце интервала. Если значения меняются в середине интервала, он все равно будет выполняться так, как это было бы в начале. Это вызывает нежелательное поведение в моем слайдере. Есть ли способ заставить setInterval() сделать оба в самом конце интервала? Желательно без jQuery.
РЕДАКТИРОВАТЬ: Пока я конвертировал свой код для публикации здесь, проблема решилась сама собой. Оказывается, это не имеет ничего общего с моим вопросом. Извините, я обязательно отправлю код в следующий раз. СПАСИБО ЗА ОТВЕТЫ!:) Надеюсь, они помогут кому-то в будущем, так как я все равно не смог найти такой вопрос.
3 ответа
Вы можете связать необходимые переменные на window
объект.
window.myVariable = 'Important String';
setInterval(function() {
doSomethingWith(window.myVariable);
}, 2000);
// Variable is changed
window.myVariable = 'Less Important String';
Да. Используйте setTimeout рекурсивно, что, как правило, лучше.
function doSomething() {
setTimeout(function () {
console.log('something')
doSomething()
}, 2000)
}
console.log('start')
doSomething()
Вы должны опубликовать часть своего кода. Я не совсем уверен, если это ваша проблема, но если вы посмотрите на это:
setInterval(() => {
var message = 'ok';
console.log(message);
}, 1000);
message = 'not ok';
Переменная 'message', определенная внутри setInterval, относится к функции, передаваемой в setInterval. Поэтому, когда я пытаюсь изменить переменную вне этой области, она не будет работать. Я на самом деле случайно создаю новую переменную в объекте окна.
Однако, если я сделаю это:
var message = 'ok';
setInterval(() => {
console.log(message);
}, 1000);
message = 'not ok';
Переменная 'message' успешно изменена, и setInterval вызовет переменную с этим изменением.