Почему не останавливается таймер? Метод start создаёт таймер, который выполняет функцию нужное кол-во раз. Если дошли до конца, вызывается метод stop, в котором происходит остановка таймера..function Worker(opts)
// ..
this.start = function()
//console.log(interval)
if (working) return

position = 0
timer = window.setInterval(function()
//console.log('timer')
position += step
on_step(position, from, to)
if (position >= to)
console.log('end1')
self.stop()

}, interval)
on_start()
working = true
on_step(position, from, to)
}

this.stop = function()
сonsole.log('end2')
if (!working) return

//console.log(timer)
window.clearInterval(timer)
working = false
on_end()
}
// ..

По какой-то причине, таймер не останавливается. Не происходит вызов stop() - в консоль firebug пишет end1, но end2 нет. Ошибок никаких не выводит.https://jsfiddle.net/crazzzy/o940649p/

21 Авг 2019 в 07:02
177 +1
0
Ответы
1

Проблема заключается в том, что внутри функции обратного вызова, переданной в setInterval, контекст this теряется, поэтому при попытке вызвать метод stop() на объекте Worker, он не может быть найден.

Вы можете исправить это, привязав правильный контекст к функции обратного вызова с помощью метода bind. Вот как это можно сделать:

this.start = function()
if (working) return
position = 0
timer = window.setInterval(function()
position += step
on_step(position, from, to)
if (position >= to)
console.log('end1')
this.stop(); // Здесь используем this, чтобы вызвать метод stop(

}.bind(this), interval); // Привязываем правильный контекст к функции обратного вызов
on_start()
working = true
on_step(position, from, to)
};

После этого изменения ваш таймер должен корректно останавливаться при достижении необходимого условия.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 620 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир