这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战
前言:
大家好啊,又见面了,我是loncon,一个前端路上不断探索的小白。相信很多小伙伴在项目中会遇到“大数问题”,也就是当用户量超级多的时候,当后端给我们返回的用户id就会很大,JavaScript能够准确表示的整数范围在 -2^53 到 2^53之间,(不含端点),所以会自动四舍五入或者补零操作,造成项目bug,那怎么办呢?
axios为了方便我们使用数据,它会在内部使用JSON.parse()把后端返回的数据转为JavaScript对象,转换过程中,如果有大数,就会转换又问题,丢失精度,所以需要优化。
// `transformResponse` 在传递给 then/catch 前,允许修改响应数据
transformResponse: [function (data) {
// 对 data 进行任意转换处理
return data;
}],
解决方法
学习一个插件 json-bigint插件,用这个插件取替换默认的axios进行的JSON.parse 它是个第三方包,提供了两个方法,stringify parse
第一步把它安装到项目中:
yarn add json-bigint
第二步引入到文件中
import JSONbig from 'json-bigint'
一系列配置
const http = axios.create({
baseURL: 'http://api-toutiao-web.itheima.net',
// timeout: 3000
transformResponse: [function (data) {
// 这里的data是字符串,在这个字符串的是没有丢失精度的,所以需要在这里先把精度调好
console.log(data)
// 后端返回数据可能不是 JSON 字符串,而JSONbig.parse()只能处理JSON字符串, try catch一下
try {
// 作用1:把json字符串转为js对象
// 作用2:把里面的大数字做安全处理
return JSONbig.parse(data)
} catch (err) {
return data
}
}]
})
注意:
默认解析后,如果有大数,会将大树解析成bigNumber类型,将来想要使用的时候得toString()
后记
好了,各位小伙伴们,今天的分享就到这里了,如果大家发现文章有不正确的欢迎指正哦,一起学习。