Неблокирующий sleep возвращает Promise и завершает его через setTimeout. Пока вызывающий код ожидает Promise, event loop может выполнять другую работу.
Реализуйте неблокирующую функцию sleep, принимающую задержку в миллисекундах.
Неблокирующий sleep возвращает Promise и завершает его через setTimeout. Пока вызывающий код ожидает Promise, event loop может выполнять другую работу.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Неблокирующий sleep возвращает Promise и завершает его через setTimeout. Пока вызывающий код ожидает Promise, event loop может выполнять другую работу.
Пример с проверкой допустимой задержки браузерного таймера:
function sleep(ms) {
if (!Number.isFinite(ms) || ms < 0 || ms > 2147483647) {
return Promise.reject(new RangeError('Недопустимая задержка'));
}
return new Promise(resolve => setTimeout(resolve, ms));
}
// await sleep(500);
Таймер не гарантирует точное время исполнения: callback может быть вызван позже из-за занятости или ограничений среды. Цикл ожидания по Date.now блокировал бы поток.