Дана синхронная функция и время в миллисекундах. Нужно вернуть новую версию этой функции, выполнение которой ограничено заданным временем. Если функция выполнится за заданное время — промис резолвится с полученными данными. Если не выполнится — промис реджектится со строкой 'time limit exceeded'.

Синхронную функцию нельзя прервать таймером в том же JS-потоке. Для жёсткого ограничения времени вычисление нужно вынести в worker или отдельный процесс.

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

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

Синхронную функцию нельзя прервать таймером в том же JS-потоке. Для жёсткого ограничения времени вычисление нужно вынести в worker или отдельный процесс.

Подробный разбор

Ответ с пояснениями

Синхронную функцию нельзя прервать таймером в том же JS-потоке. Для жёсткого ограничения времени вычисление нужно вынести в worker или отдельный процесс.

Promise.race с setTimeout не поможет, пока функция блокирует event loop. Для завершающейся функции можно лишь измерить длительность после возврата и отклонить результат строкой time limit exceeded, но это не своевременный timeout. Worker запускает известный код, передаёт результат сообщением и завершается через terminate по таймеру; произвольное замыкание так автоматически не переносится.

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

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

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

Подробнее