0

Я хочу вызвать функцию, которая может постоянно проверять количество времени, используя интервал внутри функции, которая уже работает (работает функция) с интервалом. То, что я имел сделал:Вызов функции через интервал в функции, называемой интервалом JS

var interval; 
var time = prompt("Insert amount of time in seconds"); 
function log() 
{ 
console.log ("log() called."); 
} 
function onrunning() 
{ 
    interval = setInterval(log,time*1000); 
} 
gameloop = setInterval(onrunning,5);//This interval must not cleared 

Первое количество времени работает нормально, но после того, что он не называл журнал() работать быстрее и быстрее, пока аварий браузера. Я пытался сделать это

var interval; 
var time = prompt("Insert amount of time in seconds"); 
function log() 
{ 
console.log ("log() called."); 
} 
function onrunning() 
{ 
    interval = setInterval(log,time*1000); 
} 
gameloop = setInterval(onrunning,5); 
clearInterval(interval); //tried this but no differece. 
+1

'setInterval' - вызывает обратный вызов несколько раз,' setTimeout' вызывает обратный вызов один раз - не уверен, что эта помощь –

+1

Где именно вы назовете 'clearInterval (interval)' '? Не могли бы вы включить его в свой полный код? – mdziekon

+0

Я предполагаю, что вы хотите выполнить 'log' только определенное количество раз (данное в подсказке), а затем прекратить ведение журнала, правильно? Или только один раз после того, как наступит время ожидания? – Teemu

ответ

0

Вы очистное интервал в неправильном месте.

В вашем коде вы пытаетесь его очистить до было создано (так что это в основном нет-op).

Вы хотите, чтобы очистить его после она была создана и казнены:

function log() 
{ 
    console.log ("log() called."); 
    clearInterval(interval); 
} 

Вы должны также заметить, что, так как ваш onrunning также уволен как «интервал» обратного вызова, вы создаете новый лог в каждом кадре исполнения обратного вызова. Если вы хотите очистить этот интервал, просто скопируйте ту же логику, что и выше, но внутри onrunning callback.


Я предполагаю, что вы хотите, чтобы огонь «Журнал» обратного вызова («onrunning» обратного вызова, а также, возможно) только один раз по истечении установленного периода времени. В этом случае вы должны использовать setTimeout вместо setInterval.

Это уже указано Jaromanda Xin this comment.

+0

Привет, спасибо, что ответили. Я сделал что-то подобное, но функция вызова log() все еще работает быстрее и быстрее. Все, что я хочу, - это постоянно вызывать функцию log(). 'var timeout1; var time = prompt ("Вставить количество секунд в секундах"); function log() { console.log ("log() called."); clearTimeout (timeout1); } функция onrunning() { timeout1 = setTimeout (журнал, время * 1000); } gameloop = setInterval (onrunning, 5); ' –

+0

В этом случае вы должны очистить интервал' 'onrunning'', а не' 'log''. Как я уже сказал, просто повторите ту же логику, что и для очистки '' log'' интервала. – mdziekon

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