Jsdom: Se excedió el tamaño máximo de la pila de llamadas al extender global con parentWindow

Creado en 23 ene. 2014  ·  4Comentarios  ·  Fuente: jsdom/jsdom

He notado que al extender la variable global con jsdom().parentWindow , y también al incluir una gran biblioteca como bluebird o engine.io , se han excedido errores de JSDOM con un tamaño máximo de pila de llamadas.

JSDOM continúa funcionando si está envuelto en una instrucción try...catch , entonces, ¿sería posible manejar correctamente este error dentro de JSDOM?

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

Resultados en:

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

Entiendo que el caso de uso es bastante extraño, pero tengo curiosidad por saber qué significa realmente este error.

Comentario más útil

@brianmcd ahhhh Ya veo por qué está haciendo esto ahora.

Si algún loco tiene este problema en el futuro, use _.defaults lugar de _.extend para evitar este problema.

Todos 4 comentarios

Este es un problema porque window.setTimeout jsdom contiene una llamada a global.setTimeout . Cuando son iguales, hay un desbordamiento de pila.

Dado que NodeJS tiene setTimeout, ¿hay alguna razón por la que window.setTimeout no pueda ser simplemente un clon de la función nativa?

Ha pasado un tiempo desde que trabajé en JSDOM, pero IIRC, la implementación del temporizador JSDOM realiza un seguimiento de los temporizadores abiertos para que podamos cancelarlos en window.close para evitar pérdidas de memoria de los temporizadores colgantes.

@brianmcd ahhhh Ya veo por qué está haciendo esto ahora.

Si algún loco tiene este problema en el futuro, use _.defaults lugar de _.extend para evitar este problema.

Muy feliz de que hayas publicado tu último comentario sobre el uso de defaults lugar de extend . ¡Gracias @JacksonGariety!

¿Fue útil esta página
0 / 5 - 0 calificaciones