Jsdom: تم تجاوز الحد الأقصى لحجم مكدس الاستدعاءات عند توسيع النطاق العام باستخدام Windows الرئيسي

تم إنشاؤها على ٢٣ يناير ٢٠١٤  ·  4تعليقات  ·  مصدر: jsdom/jsdom

لقد لاحظت عند توسيع المتغير العام بـ jsdom().parentWindow ، وكذلك تضمين مكتبة كبيرة مثل bluebird أو engine.io ، أخطاء JSDOM مع تجاوز الحد الأقصى لحجم مكدس الاستدعاءات.

يستمر JSDOM في العمل إذا تم تغليفه في عبارة try...catch ، فهل من الممكن معالجة هذا الخطأ بأمان داخل 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 ، لكن تنفيذ مؤقت JSDOM IIRC يتتبع أجهزة ضبط الوقت المفتوحة حتى نتمكن من إلغائها في window.close لتجنب تسرب الذاكرة من أجهزة ضبط الوقت المتدلية.

brianmcd ahhhh أرى لماذا يفعل هذا الآن.

إذا واجه أي شخص مجنون هذه المشكلة في المستقبل ، فاستخدم _.defaults بدلاً من _.extend لتجنب هذه المشكلة.

سعيد جدًا لأنك نشرت تعليقك الأخير حول استخدام defaults بدلاً من extend . JacksonGariety!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات