sleep возвращает Promise, который разрешается по таймеру. await приостанавливает только текущую async-функцию, не блокируя основной поток JavaScript.
Асинхронная задержка выполнения с помощью функции sleep
sleep возвращает Promise, который разрешается по таймеру. await приостанавливает только текущую async-функцию, не блокируя основной поток JavaScript.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию sleep, которая останавливает дальнейшее выполнение кода на заданный промежуток времени (в миллисекундах). Пример использования в асинхронном контексте:
(async () => {
await sleep(500);
console.log(777);
})();
Ответ
sleep возвращает Promise, который разрешается по таймеру. await приостанавливает только текущую async-функцию, не блокируя основной поток JavaScript.
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
(async () => {
await sleep(500);
console.log(777);
})();
Число 777 появится не раньше выполнения таймера примерно через 500 мс; занятый поток или ограничения браузера могут увеличить задержку. Для обычных неотрицательных интервалов этого достаточно. Цикл ожидания по Date.now использовать не нужно: он блокирует интерфейс и выполнение других задач.