我在追踪 Node.js 中的内存泄漏时遇到了麻烦,并编写了一个函数来监视对象和数组大小随着时间的推移而增加,但我的函数无限循环。我在其中写了一条规定来检测而不是迭代循环结构,但我犯了一些愚蠢的错误,无法弄清楚是什么。//monitor.jsconst isCircular = require("../funcs/is-circular.js");module.exports = class { constructor() { } countObjContents(obj, count = 0) { if (Array.isArray(obj)) count += this.countObjContents(obj) else if (typeof obj == "object") { if (isCircular(obj)) { console.log("!!! is circular") count++; } else { console.log("not circular") Object.values(obj).forEach(prop => { if (isCircular(prop)) { console.log("!!! is circular") count++; } else { console.log("not circular") count += this.countObjContents(obj); } }); } } else count++; return count; } watch(obj, name) { let count = false; setInterval(() => { console.log("monitoring", name) let newCount = this.countObjContents(obj) if (!count) count = newCount; else { console.log("object", name, "increased from", count, "properties to", newCount); count = newCount; } }, 5000); }}//is-circular.jsmodule.exports = (obj) => { try { JSON.stringify(obj); } catch (e) { return true; } return false;}这次我犯了什么愚蠢的错误?这似乎是简单的代码,而我不明白为什么它是无限循环的事实令人尴尬,哈哈。
1 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
您的 foreach 循环使用原始 obj 而不是道具调用 countObjContents 。
您还在第一次条件检查中重新调用 countObjContents。
countObjContents(obj, count = 0) { if (Array.isArray(obj)) count += this.countObjContents(obj)
仅这一部分就是一个无限循环
添加回答
举报
0/150
提交
取消