den0820
@den0820
Фронтенд Junior разработчик.

Как можно написать функцию freeze(), которая заблокирует уже запущенный setTimeout(function() {}, 500) на 1 секунду?

Здравствуйте. Пытаюсь решить нетривиальную задачу: например, имея некий кусок кода, который выполнится с задержкой в полсекунды, я пытаюсь заморозить это выполнение на секунду
var st = +new Date();
setTimeout(function() {
  var sf = +new Date();
  //sf должна быть больше, чем (st + 1000);
  done();
}, 500);
freeze();


Мой вариант:
var st = +new Date(),
    timerFlag = false;

st += 1000;

setTimeout(function() {
  var sf = +new Date();
 done();
  
  console.log('#500');
}, 500);

function done() {
  var timer = setInterval(function() {
    if(timerFlag) {
      timerFlag = false;
      clearInterval(timer);
    }
  }, 500);
}

function freeze() {
  setTimeout(function() {
    timerFlag = true;
    
    console.log('#1000');
  }, 1000);
}

freeze();


Но мой вариант не является правильным. Помогите разобраться с этими таймингами, пожалуйста.
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
не смотрел код чтоб мозг не ломать.

Делайте clearTimeout.
И запускайте новый таймер на секунду.

Задержать уже запущенный это что-то на грани фантастики, его только остановить можно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы