"Есть ли способ, чтобы проверить из clearTimeout был успешным."
Нет, в вашем распоряжении нет состояния, которое вы можете проверить, но если вы правильно управляете своими таймерами, это не должно быть проблемой.
Вы можете создать свой собственный объект с сохранением состояния таймера я полагаю ...
var _slice = Array.prototype.slice;
// substitute for setTimeout
function myTimer(fn,ms) {
var args = _slice.call(arguments,2),
timer_state = {
complete: false,
timer: setTimeout(function() {
timer_state.complete = true;
fn.apply(this, args);
}, ms)
};
return timer_state;
};
// substitute for clearTimeout
function clearMyTimer(timer_obj) {
timer_obj.complete = true;
clearTimeout(timer_obj.timer);
};
Пример очистки таймера ...
// create a timer
var timer = myTimer(function() {
console.log('timer is done');
}, 1000);
console.log(timer.complete); // complete? false
clearMyTimer(timer); // clear it
console.log(timer.complete); // complete? true
Пример позволить ему бежать ...
// create a timer
var timer = myTimer(function() {
console.log('timer is done');
}, 1000);
console.log(timer.complete); // complete? false
// check the timer object after it has expired
setTimeout(function() {
console.log(timer.complete); // complete? true
}, 1500);
EDIT: Обновлено, чтобы сделать this
последовательным в строгом режиме и поддерживать дополнительный аргумент, переданный обратному вызову. Спасибо за комментарий @Saxoier.
Если вы передали правильный параметр, вы очистили цикл. Но если вы хотите чувствовать себя более безопасным, подумайте о передаче другого аргумента функции, которая является «истиной» или «ложной»; если 'false', функция не должна настраивать цикл. – Jon
Я чувствую, что должен быть хороший способ отслеживать состояние вашего таймера и всегда быть уверенным, что ваш clearTimeout был успешным. Вот простая скрипка, чтобы люди начали. http://jsfiddle.net/ASYgU/ – mrtsherman
@mrtsherman umm, я попытался немного поиграть с кодом; выдает значение таймера переменной. Оказывается, это число, которое увеличивается. Одно можно сказать наверняка: оператор 'if (timer)' всегда возвращает true и не может использоваться для проверки того, работает ли таймер. Но его можно использовать для отслеживания того, сколько раз цикл выполнялся. [updated fiddle] (http://jsfiddle.net/roopunk/ASYgU/4/) – roopunk