В отличие от других языков программирования, в JavaScript нет встроенного метода сна. Таким образом, вы не можете просто вызвать функцию sleep(), чтобы приостановить программу Node.js. Однако есть и другие способы заставить программу ждать определенное время.
В этом руководстве рассматриваются три подхода: setTimeout, async/await и пакет sleep-promise.
Использование setTimeout() для ожидания определенного времени
установить время ожидания () функция планирует выполнение кода для среды выполнения по истечении заданного времени. Он принимает функцию и время задержки в миллисекундах. Вот синтаксис:
установить время ожидания (функция(), timeInMs)
Например, предположим, что у вас есть функция, которая печатает на консоли:
функцияprintSentence() {
console.log("Использование setTimeout()")
}
Чтобы запустить вышеупомянутую функцию по истечении двух секунд, передайте функцию и время задержки 2000 мс в установить время ожидания () функция:
setTimeout (printSentence, 2000 г.)
Хотя это работает, не гарантируется, что ваша функция запустится ровно через две секунды. Это определенно займет как минимум столько времени, но может занять и больше.
Является ли setTimeout() точным?
Да, но с некоторыми оговорками. установить время ожидания () является асинхронная функция JavaScript что означает, что это не блокирует. Код, который вы запланировали, добавляется в цикл событий, в то время как остальная часть вашей программы продолжается.
По истечении времени задержки ваша программа выполнит запланированный код, но только тогда, когда она свободна для этого. Если в стеке вызовов есть другой код, он будет выполняться первым, даже если запланированный код должен быть запущен. Здесь может возникнуть дополнительное время задержки, отсюда и неточность.
Рассмотрим следующую программу.
console.log("Привет, мир!")
функцияprintSentence() {
console.log("Использование setTimeout()")
}
setTimeout (printSentence, 2000 г.)
console.log("Готово")
Вот что будет отображаться в консоли при ее запуске:
Привет, мир!
Готово
Использование setTimeout()
Эта программа вводит задержку, но она задерживает только код, которому она передается. установить время ожидания (). Остальная часть программы продолжается, а запланированный код прерывает ее только по истечении времени. Если вы хотите запустить весь этот код по порядку, с паузой посередине, используя установить время ожидания () не будет работать.
Одной из альтернатив является написание синхронного кода, который будет блокировать выполнение столько времени, сколько вам нужно. Например, вы можете использовать делать пока цикл, чтобы заблокировать поток выполнения до тех пор, пока не истечет время задержки:
функциязадерживать(РС) {
константа дата = Дата.Теперь();
позволять текущаяДата = нулевой;делать {
текущаяДата = Дата.Теперь();
} пока (currentDate - дата < мс);
}
console.log("Привет, мир");
задержка (2000 г.);
console.log("Будет напечатано через 2 секунды!");
задерживать() функция зацикливается до тех пор, пока текущее время не будет равно или больше, чем время ее начала плюс задержка. Недостатком этого подхода является то, что он сильно загружает ЦП, особенно при больших задержках. сделать... в то время как цикл должен вычислять время, оставшееся после каждой миллисекунды.
Использование Async/Await для задержки программы Node.js
Ан Ждите выражение заставляет выполнение приостанавливаться до тех пор, пока обещание не будет разрешено. Он позволяет запускать асинхронный код, как если бы он был синхронным, но более эффективно, чем блокируя выполнение вручную. Вы можете использовать await только внутри функции, отмеченной асинхронный.
функциязадерживать(время) {
возвратновыйОбещать(разрешить => setTimeout (разрешить, время));
}асинхронныйфункцияprintSentence() {
console.log("Привет, мир")
Ждите задерживать(2000);
console.log("Будет напечатано через 2 секунды");
}
распечатать предложение();
Это вывод вышеуказанной программы:
Привет, мир
Будет напечатано через 2 секунды
Использование пакета обещания сна
обещание сна package упрощает процесс приостановки программ Node.js. Вам нужно только вызвать его и указать время задержки в миллисекундах.
Начните с установки через npm:
нпм установитьспать-обещать
Вот пример того, как вы можете использовать его в своей программе:
константа спать = требовать(«обещание сна»);
(асинхронный () => {
console.log("Привет, мир.");
Ждите спать(2000);
console.log("Будет напечатано через две секунды.");
})();
Когда вы запустите программу, вывод будет следующим.
Привет, мир.
Будет напечатано через две секунды.
Выбор подходящего подхода
Реализация спящего режима в Node.js может оказаться непростой задачей. Решая, как это сделать, подумайте, чего вы хотите достичь. Если вы просто хотите отложить какой-то код на минимальное время, установить время ожидания () хороший вариант. Но если вы хотите приостановить выполнение всей вашей программы, вы должны использовать асинхронно/ожидание.
Синхронный против. Асинхронное программирование: чем они отличаются?
Читать далее
Похожие темы
- Программирование
- Веб-разработка
- Программирование
- JavaScript
Об авторе

Мэри Гатони — разработчик программного обеспечения, страстно любящий создавать технический контент, который не только информативен, но и привлекателен. Когда она не программирует и не пишет, ей нравится проводить время с друзьями и гулять на свежем воздухе.
Подпишитесь на нашу рассылку
Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!
Нажмите здесь, чтобы подписаться