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

7 回复

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 可能无法正确解析,导致后续代码无法执行。

问题分析

  1. Promise 解析错误uni.request 成功时返回的是响应对象,失败时抛出错误。你的解构方式 [err, res] 会尝试将返回的对象解构到 errres,但实际返回的是单个对象,这可能导致 await 挂起或解析失败,后续代码阻塞。
  2. 无错误输出:由于 await 解析失败,且未使用 try...catch 捕获错误,控制台可能无报错,造成“卡顿”假象。
  3. 网络请求已返回:接口数据正常返回,说明请求本身成功,但代码逻辑未能处理返回结果。

解决方案

  • 直接使用 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);
      }
    }
回到顶部