我在追踪 Node.js 中的内存泄漏时遇到了麻烦,并编写了一个函数来监视对象和数组大小随着时间的推移而增加,但我的函数无限循环。我在其中写了一条规定来检测而不是迭代循环结构,但我犯了一些愚蠢的错误,无法弄清楚是什么。
//monitor.js
const 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.js
module.exports = (obj) => {
try {
JSON.stringify(obj);
} catch (e) {
return true;
}
return false;
}
这次我犯了什么愚蠢的错误?这似乎是简单的代码,而我不明白为什么它是无限循环的事实令人尴尬,哈哈。
长风秋雁
相关分类