循环引用异常 TypeError: Converting circular structure to JSON
2023-12-06 12:04:17
浏览:48
评论:0
在维护前员工的项目时,发现有个提交发送请求失败,遂逐步排查,发现 axios 拦截器抛出异常信息 TypeError: Converting circular structure to JSON,发现是循环引用异常。
排查解决
在axios中,请求参数params如果是对象的话,axios会使用URLSearchParams去转换成字符串。
// 创建一个示例对象
function transition(params) {
// 创建 URLSearchParams 对象
const searchParams = new URLSearchParams();
// 将对象的键值对添加到 searchParams 对象中
for (const key in params) {
if (params.hasOwnProperty(key)) {
searchParams.set(key, params[key]);
}
}
// 获取转换后的参数字符串
const paramsString = searchParams.toString();
console.log(paramsString);
}
// 定义参数对象
const newParams = {
page: 1,
limit: 10,
};
// 正常数据
transition(newParams);
// 循环引用没有抛出异常
newParams.v = newParams;
transition(newParams);
在axios中,请求参数data如果是对象的话,axios会使用JSON.stringify去转换成字符串。
// 创建一个示例对象
function transition(data) {
// 获取转换后的参数字符串
const dataString = JSON.stringify(data);
console.log(dataString);
}
// 定义参数对象
const newData = {
page: 1,
limit: 10,
};
// 正常数据
transition(newData);
// 循环引用有抛出异常
newData.v = newData;
transition(newData);
综合上述得出数据对象出错在data参数中。
什么是循环引用异常
循环引用异常(Cycle Reference Exception)是在编程中出现的一种错误情况,特别是在使用引用类型(如对象、类等)时。当两个或多个对象之间存在循环引用关系,即 A 对象引用 B 对象,B 对象又引用 A 对象,形成一个循环,就会导致循环引用异常。 这种循环引用会创建一个无限循环的引用链,使得对象的内存无法正常释放,从而可能导致内存泄漏和其他问题。在某些编程语言中,循环引用异常会导致程序崩溃或出现其他不可预测的行为。