Jsdom: 使用 parentWindow 扩展全局时超出最大调用堆栈大小

创建于 2014-01-23  ·  4评论  ·  资料来源: jsdom/jsdom

我注意到在使用jsdom().parentWindow扩展全局变量时,还包括一个大型库,例如bluebirdengine.io ,超过最大调用堆栈大小的 JSDOM 错误。

如果包裹在try...catch语句中,JSDOM 确实会继续运行,那么是否可以在 JSDOM 中优雅地处理此错误?

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

结果是:

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

我知道用例很奇怪,但我很好奇这个错误的真正含义。

最有用的评论

@brianmcd ahhhh我明白它为什么现在这样做了。

如果以后有疯狂的人遇到这个问题,请使用_.defaults而不是_.extend来避免这个问题。

所有4条评论

这是一个问题,因为 jsdom 的window.setTimeout包含对global.setTimeout的调用。 当它们相同时,就会出现堆栈溢出。

既然 NodeJS 有 setTimeout,有什么理由 window.setTimeout 不能只是原生函数的克隆?

自从我从事 JSDOM 工作以来已经有一段时间了,但是 IIRC JSDOM 计时器实现会跟踪打开的计时器,因此我们可以在window.close取消它们以避免悬挂计时器造成内存泄漏。

@brianmcd ahhhh我明白它为什么现在这样做了。

如果以后有疯狂的人遇到这个问题,请使用_.defaults而不是_.extend来避免这个问题。

很高兴您发表了关于使用defaults而不是extend最后评论。 谢谢@JacksonGariety!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

drewish picture drewish  ·  4评论

mitar picture mitar  ·  4评论

Progyan1997 picture Progyan1997  ·  3评论

machineghost picture machineghost  ·  4评论

domenic picture domenic  ·  3评论