ПРИМЕЧАНИЕ. Я решил закрыть частный блог, в котором я вел технические статьи, так как у меня не так много времени, чтобы писать в нем, и он устарел. Некоторые из статей, которые я написал об этом и которые хочу сохранить, я решил разместить на Medium. Некоторые могут быть старыми…
Я много раз встречал этот вопрос в разных группах и на разных платформах. Многие из них вынуждены отложить выполнение своего кода и, естественно, обращаются к вопросу об эквиваленте метода Thread.Sleep (из wither c # или java) в Javascript.
Проблема в том, что Javascript не поддерживает потоки (пока!).
Таким образом, наиболее распространенный обходной путь - заключить выполнение кода в setTimeout. Хотя это, без сомнения, задерживает выполнение кода, это не всегда то, чего мы ожидаем. Это разбивает наш код на несколько частей, что затрудняет отладку / поддержку. Кроме того, он выполняет код, на самом деле не останавливая поток нашего приложения - мы можем захотеть остановить все (даже за счет замораживания основного потока - нашего приложения / окна), пока оно не перестанет «спать».
Поэтому я подумал, что попробую использовать другой подход, чтобы попытаться лучше имитировать поведение Thread.Sleep.
Это мое пространство имен «Thread»:
var Thread = { sleep: function(ms) { var start = Date.now(); while (true) { var clock = (Date.now() - start); if (clock >= ms) break; } } };
И так я это называю:
var d1 = new Date(); console.log('start ' + d1.toLocaleTimeString()); Thread.sleep(10000); var d2 = new Date(); console.log('end ' + d2.toLocaleTimeString());
А если посмотреть в консоль, то получим следующий результат:
start 1:41:21 PM end 1:41:31 PM
Если вы планируете использовать это, делайте это осторожно. Я сделал это как POC. Это приведет к остановке вашего приложения на указанное вами количество миллисекунд.