Верните Promise, который разрешится переданным значением после таймера. Это неблокирующая задержка: вызывающий код должен использовать await или then.
Функция, реализующая паузу перед возвратом результата
Верните Promise, который разрешится переданным значением после таймера. Это неблокирующая задержка: вызывающий код должен использовать await или then.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию, которая принимает два параметра: длительность паузы (в миллисекундах) и значение, которое следует вернуть после её завершения. Функция должна приостановить выполнение на указанный промежуток времени, а затем вернуть переданное значение.
function delay(ms, result) {
// ваш код здесь
}
Ответ
Верните Promise, который разрешится переданным значением после таймера. Это неблокирующая задержка: вызывающий код должен использовать await или then.
function delay(ms, result) {
return new Promise((resolve, reject) => {
if (!Number.isFinite(ms) || ms < 0) {
reject(new RangeError('Некорректная задержка'));
return;
}
setTimeout(() => resolve(result), ms);
});
}
Например, await delay(1000, 'готово') продолжит async-функцию примерно через секунду. Основной поток не блокируется, другие события продолжают выполняться. Таймер задаёт минимальную задержку и имеет ограничения диапазона; очень длительные паузы разбивают на части. Если result — Promise/thenable, resolve усвоит его состояние, а не вернёт объект как непрозрачное значение.