Jsdom: Tamanho máximo da pilha de chamadas excedido ao estender global com parentWindow

Criado em 23 jan. 2014  ·  4Comentários  ·  Fonte: jsdom/jsdom

Percebi que ao estender a variável global com jsdom().parentWindow , e também incluir uma biblioteca grande como bluebird ou engine.io , erros JSDOM com um tamanho máximo de pilha de chamadas excedido.

O JSDOM continua a funcionar se estiver envolvido em uma instrução try...catch , então seria possível lidar com esse erro dentro do JSDOM?

_(global).extend(jsdom().parentWindow)
var engine = require('engine.io')

Resulta em:

node_modules/jsdom/lib/jsdom/browser/index.js:121
this.setTimeout = function (fn, ms) { return startTimer(setTimeout, clearT
                           ^
RangeError: Maximum call stack size exceeded

Eu entendo que o caso de uso é bastante bizarro, mas estou curioso para saber o que esse erro realmente significa.

Comentários muito úteis

@brianmcd ahhhh eu vejo porque está fazendo isso agora.

Se algum maluco tiver esse problema no futuro, use _.defaults vez de _.extend para evitar esse problema.

Todos 4 comentários

Isso é um problema porque o window.setTimeout do jsdom contém uma chamada para global.setTimeout . Quando eles são iguais, há um estouro de pilha.

Como o NodeJS tem setTimeout, existe algum motivo pelo qual window.setTimeout não pode ser apenas um clone da função nativa?

Já faz um tempo desde que eu trabalhei em JSDOM, mas IIRC a implementação do temporizador JSDOM mantém o controle dos temporizadores abertos para que possamos cancelá-los em window.close para evitar vazamentos de memória de temporizadores pendentes.

@brianmcd ahhhh eu vejo porque está fazendo isso agora.

Se algum maluco tiver esse problema no futuro, use _.defaults vez de _.extend para evitar esse problema.

Que bom que você postou seu último comentário sobre o uso de defaults vez de extend . Obrigado @JacksonGariety!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

lehni picture lehni  ·  4Comentários

cg433n picture cg433n  ·  3Comentários

philipwalton picture philipwalton  ·  4Comentários

eszthoff picture eszthoff  ·  3Comentários

jhegedus42 picture jhegedus42  ·  4Comentários