uni.request long类型精度丢失
- 发布:2023-02-23 10:03
- 更新:2023-03-21 13:26
- 阅读:1016
产品分类: uniapp/H5
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: Windows 11 家庭中文版 21H2
HBuilderX类型: 正式
HBuilderX版本号: 3.6.18
浏览器平台: Chrome
浏览器版本: 95内核
项目创建方式: HBuilderX
操作步骤:
预期结果:
uni.request long类型精度丢失
uni.request long类型精度丢失
实际结果:
uni.request long类型精度丢失
uni.request long类型精度丢失
弈凌 (作者) - yl-yue
@DCloud_UNI_WZF 你好,见附件,这里默认会使用JSON.parse
格式化,因此这里是否可以配置为使用json-bigint.parse
格式化。我是暂时改成了string
类型解决问题。
比如:这里的类型是否支持填jsonBigint
,采用json-bigint.parse
,填json
就采用JSON.parse
弈凌 (作者) - yl-yue
@DCloud_UNI_GSQ @DCloud_UNI_WZF
你好,请问类似此贴这样的需求,使用uni.request
api实现的话,是否是暂时没有优雅的解决方案?
- 拦截器中可以替换请求或响应值(如:请求与响应体的转换与加解密)
谈谈基于目前调研结果的想法:
uni.request
api给我的感觉是个半成品,不能提供如:Axios
这样的完善能力- 我猜想uni官方就是只做跨端适配,并只提供基础的api能力,再由业务开发者去封装实现,因此插件市场才有那么多
ui
库,request
工具库,但目前成熟的vue3+nvue
ui库相对来说不尽人意。
可以的话,希望能解下惑,谢谢。
弈凌 (作者) - yl-yue
问题已解决,@DCloud_UNI_GSQ @DCloud_UNI_WZF 建议在文档中补充一下,在returnValue拦截器中解决,并且uni.request()内不要传入callback(success / fail / complete任一个),否则returnValue内返回的是RequestTask对象
弈凌 (作者)
你好,接口是外部的系统,只能前端通过json-bigint方式处理,我想尝试 uni.addInterceptor('request') 这里试下 json-bigint 处理,但在如何引用 json-bigint ts包给卡住了,能提点下么,谢谢。
2023-02-23 10:38
弈凌 (作者)
你好,
json-bigint
导包已解决,不支持ts包,我换成js包就好了。但在uni.addInterceptor
中拦截request
是无效的,请问有什么较好的切点么,还是只能换库,uni.request
api暂不支持。2023-02-23 10:52
DCloud_UNI_WZF
回复 8***@qq.com: 参考文档检查你的用法是否正确,理论上不会存在api无效的问题
如确认框架问题,提供最简可复现demo
2023-02-23 10:55
弈凌 (作者)
回复 DCloud_UNI_WZF: 你好,我还想确认下
dataType
能传哪些类型(文档中没写),我传了个string
问题就解决了。应该是uni.request
默认会使用JSON.parse
格式化,导致的long类型丢失精度2023-02-23 13:47
弈凌 (作者)
回复 DCloud_UNI_WZF: 将
dataType
改为string
后,能解决精度丢失的问题,但这样需要我每次都去调用json-bigint.parse()
,能否有一种优雅的方案,如统一拦截处理。2023-02-23 13:58
DCloud_UNI_GSQ
回复 8***@qq.com: 可以,使用拦截API,或者再封装都可以
2023-02-23 17:06
弈凌 (作者)
回复 DCloud_UNI_GSQ:
你好,拦截api不支持替换值,示例如下,替换值操作无效:
2023-02-23 18:58
DCloud_UNI_WZF
回复 8***@qq.com: 不要直接处理整个result,仅处理需要处理的属性
可以了解下js闭包和作用域
2023-02-23 20:09
弈凌 (作者)
回复 DCloud_UNI_WZF: 你好,感谢你的告知,已测试可以做到更细致化的拦截,但重新赋值的这一步是无效的,拦截器中重新赋值后,在当前请求中得到的结果还是原始结果。
2023-02-24 11:06