Учебный одноразовый таймер можно построить на setInterval: при первом срабатывании очистить интервал и вызвать callback. Без таймерного механизма окружения честную неблокирующую задержку не реализовать.
Создание собственной функции setTimeout
Учебный одноразовый таймер можно построить на setInterval: при первом срабатывании очистить интервал и вызвать callback. Без таймерного механизма окружения честную неблокирующую задержку не реализовать.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Напишите свою реализацию функции setTimeout, которая принимает в качестве первого параметра стрелочную функцию и запускает её через 400 мс. Передаваемая стрелочная функция должна вывести в консоль строку "Hello".
Ответ
Учебный одноразовый таймер можно построить на setInterval: при первом срабатывании очистить интервал и вызвать callback. Без таймерного механизма окружения честную неблокирующую задержку не реализовать.
function mySetTimeout(callback, delay = 400) {
const id = setInterval(() => {
clearInterval(id);
callback();
}, delay);
return () => clearInterval(id);
}
mySetTimeout(() => console.log('Hello'), 400);
Возвращается функция отмены, а не полный аналог идентификатора стандартного setTimeout. Ожидание номинально 400 мс, фактический запуск может быть позже. Busy-wait блокировал бы страницу, а бесконечная цепочка Promise могла бы не дать пройти задачам; это не подходящие замены таймера.