json-bigint踩坑记录

492 阅读1分钟

原因:后端返回的id数字长度超过16位的数字会出现精度丢失。所以使用json-bigint来解决。

解决方式:在发送请求时, 在transformResponse参数,使用第三方的包json-bigint。它在把json字符串转json对象的过程中,自动识别大整数,把大整数转成一个对象来表示,这样就不会产生精度丢失的问题了。

        url:url,
        method:'post',
        headers: {
            'Content-Type': 'application/json;charset=utf8'
        },
        transformResponse: [
            function (resData) {
                return JSONBig.parse(resData);
            }
          ],
        data:data

坑来了,当json-bigint工作时,会将整数转化为对象,分为几段,若某段是以0开头,他将会隐去0,导致id不完整。

解决方法:使用PadStart(x,y)。x代表所需长度,若字符串小于这个长度就在字符串开头加上几位y

 res.data.forEach((e)=>{
            //由于第二段开头是0,bigint将会隐去0
           e.id=e.id.c[0].toString()+JSON.stringify(e.id.c[1]).padStart(14,0)
        })