Вопрос

Я думаю, что, возможно, я переутомился, но я ни за что на свете не могу разобраться в этом, и я думаю, что это из-за недостатка знаний 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);
};

Другие советы

Я думаю, ошибка, которую вы совершаете, заключается в том, что функция itv не возвращается setInterval(function(){ sys.puts('interval'); }, 1000) он выполняет setInterval(function(){ sys.puts('interval'); }, 1000) и затем возвращает обратно идентификатор, который генерирует setInterval.Этот идентификатор затем передается в clearInterval функция, чтобы остановить что setInterval(function(){ sys.puts('interval'); }, 1000) делает.

Редактировать:Пример одной функции, которая могла бы работать.

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);
}

Это еще один способ написать свою версию, вы видите, что передаете функцию в 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);
}

Отказ от ответственности :Я не проверял это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top