2014-02-12 2 views
0

Вот код, который я использую. Когда тики становятся равными 5, функция рекурсии должна прекратить очистку таймаута mainThread. Кто-нибудь, пожалуйста, помогите.clearTimeout не работает в функции рекурсии - javascript

var mainThread; 
var ticks = 0; 
function tickTimer() { 
    clearTimeout(mainThread); 
    if (ticks >= 5) { 
     endGame(); 
    } 
    else { 
     mainThread = setTimeout(function() { 
      ticks++; 
      tickTimer(); 
     }, 1000); 
    } 
} 

Дайте мне знать, если возникнут проблемы. Спасибо заранее.

+0

Вы уменьшив значение 'ticks' еще ожидают, что игра заканчивается, если значение становится больше или равно 5. – UweB

+0

, как указано @UweB, не должен» t условие '' 'if'''' '' if (ticks == 5) {endGame(); } '' 'потому что' '' (ticks> = 5) '' 'всегда будет возвращать true? – Varinder

+1

Рассмотрите возможность использования ['setInterval'] (http://stackoverflow.com/q/729921/7586) вместо вызова' setTimeout' несколько раз. – Kobi

ответ

1
you can try this. all you need to do is clear interval every time tickTimer function is called. 

var mainThread = setInterval(tickTimer, 1000); 
var ticks = 0; 

function tickTimer() {  
    if (++ticks >= 5) { 
     clearInterval (mainThread); 
     endGame(); 
    } 
} 
+0

Отлично! Шил. Это сработало. BTW loxxy дал тот же ответ. и работает. –

+0

@sheelpriy Добавление вашего понимания к чьему-то ответу замечательно. Но всегда старайтесь давать кредиты, если они есть. – loxxy

1

Вы объявили mainThread? Как это

var mainThread = null; 
function tickTimer() { 
    clearTimeout(mainThread); 
    mainThread = null; 
    if (ticks >= 5) { 
     endGame(); 
    } 
    else { 
     mainThread = setTimeout(function() { 
      ticks++; 
      tickTimer(); 
     }, 1000); 
    } 
} 

ticks++ И не ticks--

+0

Абсолютно никакой настройки льгот 'mainThread' не имеет значения. – UweB

2

Попробуйте вместо этого:

function tickTimer() {  
    if (++ticks >= 5) { 
     clearInterval (mainThread); 
     endGame(); 
    } 
} 

var mainThread = setInterval(tickTimer, 1000); 
var ticks = 0; 
+0

Отлично !!! Это сработало. Также он оптимизировал код. Большое спасибо. –

+0

Рад, что это помогло. – loxxy

0

Я думаю, просто отправить свой таймер в качестве аргумента

function tickTimer(timer) { 
    timer && clearTimeout(timer); 
    if (ticks >= 5) { 
     endGame(); 
    } 
    else { 
     var timer = setTimeout(function() { 
      ticks--; 
      tickTimer(timer); 
     }, 1000); 
    } 
} 

Не используйте глобальные объем)))

0

Я хочу, чтобы вы инициализировали переменные тики при срабатывании функции.

1

Пожалуйста, попробуйте заменить ticks-- на ticks++

 Смежные вопросы

  • Нет связанных вопросов^_^