Можно ли зависнуть Node.js со стороны JavaScript/V8, не используя бесконечный цикл while(true)? Как сделать так, чтобы очередь промисов никогда не опустела?

Да, в Node.js можно «зависнуть» со стороны JavaScript/V8 без использования бесконечного цикла while(true).

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

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

Да, в Node.js можно «зависнуть» со стороны JavaScript/V8 без использования бесконечного цикла while(true). Это возможно, если постоянно добавлять задачи в очередь микротасков (промисов), не давая event loop перейти к другим операциям.

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

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

Да, в Node.js можно «зависнуть» со стороны JavaScript/V8 без использования бесконечного цикла while(true). Это возможно, если постоянно добавлять задачи в очередь микротасков (промисов), не давая event loop перейти к другим операциям.

Чтобы очередь промисов никогда не опустела, можно рекурсивно создавать промисы, которые в then создают следующий промис, например:

function keepQueueBusy() {
  Promise.resolve().then(() => {
    // какая-то работа
    keepQueueBusy();
  });
}

keepQueueBusy();

Таким образом, микротаски (промисы) постоянно добавляются в очередь, и event loop не сможет перейти к обработке макротасков или другим операциям, что приведёт к зависанию.

Это не бесконечный цикл в классическом понимании, но эффект похожий — постоянная загрузка очереди микротасков.

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

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

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

Подробнее