Создание собственной функции setTimeout

Учебный одноразовый таймер можно построить на setInterval: при первом срабатывании очистить интервал и вызвать callback. Без таймерного механизма окружения честную неблокирующую задержку не реализовать.

Короткий ответ

Что ответить на собеседовании

Учебный одноразовый таймер можно построить на 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 могла бы не дать пройти задачам; это не подходящие замены таймера.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее