sleep возвращает Promise, который выполняется из callback setTimeout. Ожидание не блокирует поток JavaScript, а реальная задержка может оказаться больше заданной.
Создание функции паузы (sleep)
sleep возвращает Promise, который выполняется из callback setTimeout. Ожидание не блокирует поток JavaScript, а реальная задержка может оказаться больше заданной.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Требуется реализовать функцию sleep, которая принимает один аргумент — количество миллисекунд, и возвращает объект Promise. Этот Promise должен переходить в состояние resolved через указанный промежуток времени.
Пример использования:
sleep(2000).then(() => console.log('2 секунды прошли'));
Ответ
sleep возвращает Promise, который выполняется из callback setTimeout. Ожидание не блокирует поток JavaScript, а реальная задержка может оказаться больше заданной.
function sleep(ms) {
if (!Number.isFinite(ms) || ms < 0) {
return Promise.reject(new RangeError('Некорректная задержка'));
}
return new Promise(resolve => setTimeout(resolve, ms));
}
await sleep(2000);
console.log('Продолжаем');
Таймер задаёт задержку до возможности выполнить callback, а не точное время исполнения. Пока Promise ожидает, event loop может обрабатывать другие задачи. Для очень больших задержек нужно учитывать ограничения таймеров среды.