Почему не останавливается таймер? Метод 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
180 +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
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир