每当我使用near-cli
调用我的合同view
方法时,它都能正常工作,终端会以JSON格式正确输出结果。
但当我在我的角度项目中使用near-api-js
方法调用相同的方法时,它会给出一个错误:
Error: Uncaught (in promise): TypeError: JSON.stringify cannot serialize cyclic structures.
near-cli
的输出供参考,也是我通过near-api-js
:调用相同方法时的预期输出
{
files: [
{
owner: 'some string',
key: 'some string',
cid: 'some string'
}
],
length: 1
}
造成这种情况的原因是什么?解决方案是什么?
循环参考示例:
var circularReference = {otherData: 123};
circularReference.myself = circularReference;
JSON.stringify(circularReference);
说明:circularReference
通过cirularReference.myself
表示自身。
Mozilla的网站上有一个很好的例子,说明如何找到和删除循环引用:
const getCircularReplacer = () => {
const seen = new WeakSet();
return (key, value) => {
if (typeof value === "object" && value !== null) {
if (seen.has(value)) {
return;
}
seen.add(value);
}
return value;
};
};
JSON.stringify(circularReference, getCircularReplacer());
// {"otherData":123}
你可以修改它,而不是删除循环引用
然而,这是一种症状性治疗。最好的办法是首先找出循环引用出现的原因,如果这是由错误引起的,那么就修复它