uni-app uni.request 断网后启动报错 {"errMsg":"request:fail abort statusCode:-1"}

uni-app uni.request 断网后启动报错 {“errMsg”:“request:fail abort statusCode:-1”}

测试过的手机

魅族18,小米12,iqoo z1,红米K40,oppo reno6

示例代码

uni.request({  
    url: apiUrl, //仅为示例,并非真实接口地址。  
    data: data,  
    method: method,  
    header: header,  
    success: (apiRes) => { //成功  
        switch (apiRes.data.code) {  
            case 0:  
                console.log(  
                    "%c 备注:", 'font-size:15px', apiName,  
                    "\n 提交方式:", method,  
                    "\n 提交地址:", apiUrl,  
                    "\n 提交data:", data,  
                    "\n 请求返回", apiRes.data);  
                break;  
            default:  
                console.log(  
                    "%c 备注:", 'font-size:15px', apiName,  
                    "\n 提交方式:", method,  
                    "\n 提交地址:", apiUrl,  
                    "\n 提交data:", data,  
                    "\n 请求返回", apiRes.data);  
                break;  
        }  

        console.log(apiRes)  
    },  
    fail(apiRes) { //失败  
        resolve(apiRes); //成功返回,resolve是Promise的回调方式  
        console.error(  
            "%c 备注:", 'color:red;font-size:15px', apiName,  
            "\n 提交方式:", method,  
            "\n 提交地址:", apiUrl,  
            "\n 提交data:", data,  
            "\n 请求返回", apiRes);  
        if(show){  
            uni.hideLoading();  
        }  
    },  
    complete(res) { //结束  
        // #ifdef APP-PLUS  
        if (getApp().globalData.log == true) {  
            var logData = '备注:' + apiName +'\r\n'+ '提交方式:' + method + '\r\n'+'提交地址:' + apiUrl +'\r\n'+'token:'+uni.getStorageSync('token')+'\r\n'+ '提交data:' +   
                JSON.stringify(data) +'\r\n'+ '请求返回' + JSON.stringify(res.data)  
            log.writeLog(logData, false);  
        }  
        // #endif   
        if(show){  
            uni.hideLoading();  
        }  

    }  
});

操作步骤

关闭WIFI和数据后打开 APP uni.request调用返回 {“errMsg"quot;request:fail abort statusCode:-1”} 此时在打开WIFI或数据 APP uni.request直接不响应 出现假死状态 所有的API都不请求 最后从后台关闭APP再进 部分手机 进去会成一直假死的状态 只有从后台清除缓存 或者重新下载才能恢复

预期结果

手机 进去会成一直假死的状态 只有从后台清除缓存 或者重新下载才能恢复

实际结果

如下视频 只有卸载重装才能恢复

bug描述

关闭WIFI和数据后打开 APP uni.request调用返回 {“errMsg"quot;request:fail abort statusCode:-1”} 此时在打开WIFI或数据 APP uni.request直接不响应 出现假死状态 所有的API都不请求 (网络恢复后还是原来的样子) 但是再web上面运行复现不了这个问题 只有在真机里面才会有这个问题

产品分类 开发环境操作系统 开发环境操作系统版本号 HBuilderX类型 HBuilderX版本号 手机系统 页面类型 vue版本 打包方式 项目创建方式
uniapp/App Windows Windows 11 正式 3.7.6 全部 nvue vue2 云端 HBuilderX

更多关于uni-app uni.request 断网后启动报错 {"errMsg":"request:fail abort statusCode:-1"}的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

我这边使用hellouni进行测试是正常的,请提供复现demo。

更多关于uni-app uni.request 断网后启动报错 {"errMsg":"request:fail abort statusCode:-1"}的实战教程也可以访问 https://www.itying.com/category-93-b0.html


已经找到解决方案 加个定时任务就好了

回复 Reaper: 感谢大佬 问了很多群没有一个回复的,按照你的方法加了个定时器解决了这个问题 不知道为什么会这样

回复 Reaper: 你好,请问定时任务的逻辑是怎样的

警测试 uni.request 是有走的 只不过他一直返回异常 没网 但是网络确定已经恢复

好像真是

这个错误是uni-app在网络异常情况下的常见问题,主要是由于uni.request在网络断开时触发了abort状态导致的。

针对你描述的问题,建议从以下几个方面处理:

  1. 网络状态检测: 在发起请求前先检查网络状态,可以使用uni.getNetworkType()或uni.onNetworkStatusChange()监听网络变化

  2. 错误处理优化: 在fail回调中需要明确处理statusCode为-1的情况,建议添加重试机制或提示用户检查网络

  3. 请求超时设置: 为uni.request添加timeout参数,避免请求长时间挂起

  4. 请求队列管理: 可以考虑实现请求队列,在网络恢复后重新发送失败的请求

  5. 针对APP端特有的问题: 可以尝试在manifest.json中配置networkTimeout参数

示例改进代码片段:

uni.getNetworkType({
  success: (res) => {
    if(res.networkType === 'none'){
      // 提示用户无网络
      return;
    }
    // 正常发起请求
    uni.request({
      timeout: 10000,
      // 其他参数...
    })
  }
})
回到顶部