2014-09-27 3 views
-1

Я использую функцию setInterval(); для запуска функции каждые 5 секунд, но я хочу очистить этот интервал, если выполнено какое-то условие.Как очистить интервал в рекурсивном вызове в javascript

function do_the_job(){ 
//some code 
if(some_condition) 
    { 
    clearInterval(interval); 
    }else{ 
     clearInterval(interval); 
     var interval = setInterval(do_the_job(),5000); 
     } 
} 

Функция clearInterval(); здесь не работает.

ответ

0

В вашем коде var interval =... является локальным, не видимым за пределами функции вызова функции и, следовательно, не будет работать в рекурсивной функции.

Сделать глобальную переменную interval, и она будет работать.

решение

var interval; 
function do_the_job(){ 
//some code 
if(some_condition) 
    { 
    clearInterval(interval); 
    }else{ 
     clearInterval(interval); 
     interval = setInterval(do_the_job(),5000); 
     } 
} 
1

Сделать interval глобальной или «расширенной областью» переменной, переместив ее объявление за пределами операторов if, так что это фактически в области при очистке.

1

Это не очень хорошее время, чтобы использовать setInterval(), попробуйте setTimeout() вместо

function do_the_job(){ 
//some code 
if(some_condition) 
    { 
    // job done 
    }else{ 
     setTimeout(do_the_job,5000); 
     } 
} 
0
var interval = setInterval(do_the_job(),5000); 

не должно быть parethesees

var interval = setInterval(do_the_job,5000); 
Смежные вопросы