Я думаю, что мог бы быть утомлен, но я не могу ни за что в жизни понять это, и я думаю, что это происходит из-за отсутствия знаний JavaScript
var itv=function(){
return setInterval(function(){
sys.puts('interval');
}, 1000);
}
var tout=function(itv){
return setTimeout(function(){
sys.puts('timeout');
clearInterval(itv);
}, 5500);
}
С этими двумя функциями я могу звонить
a=tout(itv());
и заставьте таймер цикличного выполнения работать в течение 5,5 секунд и затем выходить по существу.
Моей логикой это должно работать, но это просто не
var dotime=function(){
return setTimeout(function(){
clearInterval(function(){
return setInterval(function(){
sys.puts("interval");
}, 1000);
});
}, 5500);
}
любое понимание в этом вопросе ценилось бы.
он не может работать, потому что ваш setInterval
будет вызываться ПОСЛЕ тайм-аута! ваш исходный подход верен, и вы все еще можете обернуть его в одну функцию:
var dotime=function(){
var iv = setInterval(function(){
sys.puts("interval");
}, 1000);
return setTimeout(function(){
clearInterval(iv);
}, 5500);
};
Это еще один способ написать вашу версию, вы видите, что вы передаете функцию в clearInterval, где вы должны были передать ей идентификатор таймера.
var dotime=function(){
var g=function(){
var f=function(){
return setInterval(function(){
sys.puts("interval");
}, 1000);
}
clearInterval(f);
}
return setTimeout(g, 5500);
}
Чтобы заставить его работать, вы должны вызвать функцию:
clearInterval(f());
Или, используя вашу версию:
var dotime=function(){
return setTimeout(function(){
clearInterval(function(){
return setInterval(function(){
sys.puts("interval");
}, 1000);
}());
}, 5500);
}
Заявление об ограничении ответственности: я не тестировал это.
Думаю, вы делаете ошибку, потому что функция itv
не возвращает setInterval (function () {sys.puts ('interval');}, 1000)
он выполняет setInterval (function () {sys.puts ('interval');}, 1000)
и затем возвращает идентификатор, который генерирует setInterval. Затем этот идентификатор передается в функцию clearInterval
, чтобы остановить то, что делает setInterval (function () {sys.puts ('interval');}, 1000)
.
Edit : Пример одной функции, которая будет работать.
var dotime=function(){ // Start our interval and save the id var intervalId = setInterval(function(){ // This will get executed every interval sys.puts("interval"); }, 1000); // Start our timout function setTimeout(function(){ // This will get executed when the timeout happens clearInterval(intervalId); // Stop the interval from happening anymore }, 5500); }