Синхронную функцию нельзя прервать таймером в том же JS-потоке. Для жёсткого ограничения времени вычисление нужно вынести в worker или отдельный процесс.
Дана синхронная функция и время в миллисекундах. Нужно вернуть новую версию этой функции, выполнение которой ограничено заданным временем. Если функция выполнится за заданное время — промис резолвится с полученными данными. Если не выполнится — промис реджектится со строкой 'time limit exceeded'.
Синхронную функцию нельзя прервать таймером в том же JS-потоке. Для жёсткого ограничения времени вычисление нужно вынести в worker или отдельный процесс.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Синхронную функцию нельзя прервать таймером в том же JS-потоке. Для жёсткого ограничения времени вычисление нужно вынести в worker или отдельный процесс.
Promise.race с setTimeout не поможет, пока функция блокирует event loop. Для завершающейся функции можно лишь измерить длительность после возврата и отклонить результат строкой time limit exceeded, но это не своевременный timeout. Worker запускает известный код, передаёт результат сообщением и завершается через terminate по таймеру; произвольное замыкание так автоматически не переносится.