uni.request
uni.request 在 fail 回调里返回的对象并不是完全固定的,而是“平台给什么就返回什么”。下面把各端实际出现过、可能出现的字段一次性列给您,方便您排查时对照。
开发阶段最简单的方法就是直接在 fail 里 console.log(err),一眼就能看到当前平台到底给了哪些键值。
通用字段(绝大多数平台都有)
errMsg 错误描述,字符串
常见取值举例:
• "request:fail timeout" 超时
• "request:fail abort" 主动调用 abort
• "request:fail ssl hand shake error" 证书校验失败
• "request:fail network unreachable" 飞行模式/无网络
• "request:fail invalid url" url 含非法字符
• "request:fail 6" 仅 iOS 首次安装未授权网络权限
errCode 平台自定义错误码,数字或字符串,各端值不同
errSubject 2022-11-11 之后的新 API 才会带,标识错误来源,如 "uni.request"
cause 链式错误,底层 SDK 抛出的原始错误会放在这里,便于排查
各端特有的额外字段
App-iOS / App-Android
• statusCode 服务器返回非 2xx 时透传
• header 服务器响应头(debug 模式下安卓可能拿不到)
• cookies 服务器返回的 set-cookie 数组
微信小程序
• errno 微信自定义错误码
• stack 部分基础库版本会带调用栈
支付宝小程序
• error 数字错误码
• errorMessage 文字描述
H5
• 若跨域,浏览器直接抛异常,err 里可能只有 message 和 stack,没有 errCode
HarmonyOS
• 目前与 App 端基本一致,但 4.31 alpha 之前 cookie 字段存在格式 bug
使用 Promise 写法时的差异
Vue2:fail 信息会作为数组第 1 项 [err, undefined]
Vue3:直接进入 .catch(err => ...),err 结构与上面相同
一句话总结:
fail 回调里至少会有 errMsg,其余字段(errCode、statusCode、header、cookies、cause …)取决于当前平台和具体错误场景。
调试时直接把 err 打印出来即可看到完整内容。
还没有评论哦,来抢个沙发吧!