uni-app Promise 封装 uni.request 的问题
uni-app Promise 封装 uni.request 的问题
产品分类:
uniapp/小程序/微信
PC开发环境操作系统:
Windows
PC开发环境操作系统版本号:
10
HBuilderX类型:
正式
HBuilderX版本号:
3.2.2
第三方开发者工具版本号:
1.05.2107090
基础库版本号:
2.6.6
项目创建方式:
HBuilderX
示例代码:
async post(){
console.log('可以执行');
let [err, res] = await uni.request({
url: url,
method: 'POST',
dataType: 'json',
header: {'content-type': 'application/x-www-form-urlencoded'},
data: {...}
})
console.log('无法执行,且控制台无任何报错信息');
}
操作步骤:
- wu
预期结果:
- wu
实际结果:
- wu
bug描述:
项目已上线,正常使用一年多.
近期开发小程序,运行到微信开发者工具后,发生过好几次小程序已运行,但是执行到网络请求后 卡顿到 uni.request。
在此之前可以打印出,但是之后却无法打印出内容。
因为是封装所以无法打印调试错误信息,经过多次调试锁定问题是网络请求出现的问题。
暂时不知道如何能调试一些错误.
从网络看,调用的接口数据已经正常返回。
更多关于uni-app Promise 封装 uni.request 的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
trycatch一下,看看是否有报错信息
更多关于uni-app Promise 封装 uni.request 的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
非常奇怪,try已经进入 但是还是到 request就停止,未抛出任何异常.
微信开发者工具升级到最新,切换多个基础库
从网络看 接口已经200返回数据,但是就是不往下走。很可能是 await 之后出现的问题
回复 乘风御上: 真机调试有问题吗?之前没有问题的话,开发者工具降级一下还有没有问题?
DevTools failed to load SourceMap: Could not load content for http://127.0.0.1:23308/.sourcemap/mp-weixin/common/main.js.map: HTTP error: status code 403, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load SourceMap: Could not load content for http://127.0.0.1:23308/.sourcemap/mp-weixin/common/runtime.js.map: HTTP error: status code 403, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load SourceMap: Could not load content for http://127.0.0.1:23308/.sourcemap/mp-weixin/common/vendor.js.map: HTTP error: status code 403, net::ERR_HTTP_RESPONSE_CODE_FAILURE
近期这些每次启动都会有,以前是没有的,我去找对应文件都能找到,不知道是否有关
在 uni-app 中,uni.request 默认返回的是 Promise,但你的代码使用了数组解构 [err, res] 的写法,这通常用于类似 uni.request 的旧版本回调风格或某些第三方库的封装。当前 uni.request 的 Promise 返回格式是 { data, statusCode, header, cookies },而不是 [err, res]。因此,你的 await 等待的 Promise 可能无法正确解析,导致后续代码无法执行。
问题分析:
- Promise 解析错误:
uni.request成功时返回的是响应对象,失败时抛出错误。你的解构方式[err, res]会尝试将返回的对象解构到err和res,但实际返回的是单个对象,这可能导致await挂起或解析失败,后续代码阻塞。 - 无错误输出:由于
await解析失败,且未使用try...catch捕获错误,控制台可能无报错,造成“卡顿”假象。 - 网络请求已返回:接口数据正常返回,说明请求本身成功,但代码逻辑未能处理返回结果。
解决方案:
- 直接使用 Promise 风格:修改代码,使用
try...catch处理uni.request,避免解构。示例:async post() { console.log('可以执行'); try { const res = await uni.request({ url: url, method: 'POST', dataType: 'json', header: { 'content-type': 'application/x-www-form-urlencoded' }, data: {...} }); console.log('请求成功', res.data); // res 包含 data、statusCode 等 } catch (err) { console.error('请求失败', err); } }

