Задать вопрос
Ответы пользователя по тегу Node.js
  • Почему код не выполняется

    qxfusion
    @qxfusion
    Ответ достаточно простой — дело в том что Ваш код в принципе не вызывается.

    Когда Вы выполняете функцию в ТЕКУЩЕМ контексте — то конвеер ноды (V8) занят выполнением Вашей функции — скажем например — function foo()
    Вы пытаетесь создать объект jsdom НО результат метода env является асинхронным, поэтому он будет добавлен в стэк будущих вызовов, НО т.к. в текущем контексте функция foo еще не завершилось, то планировщик НЕ может перейти к другому заданию.

    Например у Mozilla Rhino нет такой проблемы благодаря Java основе, но в V8 модель потоков исключительно однопоточная в рамках контекста.

    Решение: попробуйте вызывать каждую интерацию через setTimeout или process.nextTick (хотя конечно этот метод будет скоро deprecated) тогда Вы получите сильно загруженный конвеер, однако у Вас будут работать асинхронные события.
    P.S. при бесконечном заполнении стэка вызовов при количестве возвратов более чем 50000 нода скорее всего упадет, поэтому не забывайте контролировать рост очереди вручную.
    Ответ написан
    Комментировать