uni-app 【报Bug】vue3 uni.showLoading方法会运行两秒左右自动关闭 未调用hideloading或showToast

uni-app 【报Bug】vue3 uni.showLoading方法会运行两秒左右自动关闭 未调用hideloading或showToast

开发环境 版本号 项目创建方式
Windows win10 21H1 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:win10 21H1

HBuilderX类型:正式

HBuilderX版本号:3.2.16

手机系统:Android

手机系统版本号:Android 11

手机厂商:小米

手机机型:红米K30 PRO

页面类型:vue

vue版本:vue3

打包方式:云端

操作步骤:
1. hbuilderx新建项目-uniapp-默认模板
2. manifest选择vue3版本
3. 在/pages/index/index onload中,写下最简单测试代码

```javascript
setTimeout(() => {  
    uni.showLoading({  
      title: '测试'  
    })  
}, 2000)
  1. 真机连接进行调试
  2. showloading正常展示,过两秒后自动关闭

预期结果: showloading除非调用hideloading,否则一直展示在页面

实际结果: app平台调用showloading,过两秒自动关闭

bug描述: 创建了一个uniapp空白模板,调用uni.showLoading(),根本没有调用hideloading或showToast,在app平台会过两秒自动关闭,在h5平台正常,用同事的安卓测试,百分百复现


更多关于uni-app 【报Bug】vue3 uni.showLoading方法会运行两秒左右自动关闭 未调用hideloading或showToast的实战教程也可以访问 https://www.itying.com/category-93-b0.html

41 回复

alpha 3.3.1 已修复

更多关于uni-app 【报Bug】vue3 uni.showLoading方法会运行两秒左右自动关闭 未调用hideloading或showToast的实战教程也可以访问 https://www.itying.com/category-93-b0.html


自己去好好测试一下,bug依旧存在,根本没有解决

表示关注

补充复现代码

经测试,无论是最新正式版还是最新alpha版本,在ios平台使用模拟器也可复现 @DCloud_UNI_Anne

问题确认,后续优化,已加分,感谢您的反馈!

这个问题,一年之前就存在了,为什么现在还没有修复? https://blog.csdn.net/qq_44467976/article/details/104176411

此贴是vue3的一个bug,和你说的不是同一个问题。

你发的这个我也看了。你是希望 Loading 和 toast 同时出现在页面上?你希望用户关注哪个信息?

uni.showLoading的问题根本没有解决,app端现在直接一秒都不到就消失了,完全没有调用hideloading,百分之百复现

是用HBuilderX 3.3.1+以上版本吗?请提供下可复现的示例(上传附件)并说明具体复现设备信息

请问修复了吗,我也是服了。目前的版本是 3.4.7 ,在APP-vue页面,也是显示了连1秒都不到,直接一闪而过。我还以为是我的调用时机不对。还是没有解决吗

发帖子说明你的具体情况,这个 bug 已经修复过了

回复 DCloud_UNI_LXH: 还是没有修复啊

同问,H5使用也是不到一秒就直接消失了。 跳转到新页面,打开showLoading,预期效果是一直显示,直到数据加载完毕再调用hide,但是现在是打开showLoading 不到一秒自动消失。

发帖子,带上你出现问题的示例

回复 DCloud_UNI_LXH: 能不能让uni.showLoading 只有uni.hideLoading()时消失,现在showToast后就消失了

回复 DCloud_UNI_LXH: 官网文档上还写着 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。 但是根本不是,showToast hideToast 也能让其消失

回复 DCloud_UNI_LXH: 我现在的场景是 列表数据请求后,点击其中一条跳转详情修改,修改完毕通知列表刷新。修改完毕toast 提示保存成功, 然后延时器通知列表刷新并返回页面。弱网环境下,列表还在请求数据,并没有看到showLoading框,因为showToast 给loading框关闭了。

回复 2***@qq.com: 还有就是uni.setNavigationBarTitle 这个方法在华为手机上设置导航栏标题大多数情况下不生效,偶尔生效

回复 2***@qq.com: 如果使用了 showLoading ,然后使用 showToase 方法,则会变为之后的 toast,因为你调用了说明你想让用户关注 toast 信息。但是调用 hideToast 是不会让 loading 消失的,而且会在控制台有提示。

回复 DCloud_UNI_LXH: 上面16:02的回复麻烦看下,我是先toast提示,然后延时器里面通知上一页面调用列表接口和返回上一页面,但是接口调用方法里面的showLoading 没显示

回复 2***@qq.com: 提供示例

回复 DCloud_UNI_LXH: 下方回复附件为示例

回复 2***@qq.com: 设计如此。在调用 navigateBack 后,会关闭 toast 和 loading

头疼,找不出问题,自己凑合写一个loading用,不然找问题太浪费时间了

下方附件为示例

解决了没呀 ,vue3 小程序 用的时候也是这样的,没有调用hideloading转了一下自己就没了

执行hellouniapp也这样吗?

偶尔几秒就自动关闭了

请问怎么修复的,为啥我这边还是存在这个问题?

详细描述一下你的环境和代码,最好再开一个帖子然后 @ 我回答

还是有这个问题的,app,showLoading后两秒左右消失

提供一个复现demo,使用的什么版本 HX?

为什么会遇到异步返回结果直接就消失了

2025-07-31,这个bug依旧存在,app上没使用hideLoading,showLoading两秒钟就自动关闭,版本是hbuilderx4.75

uni-app 项目的 loading?运行 hello uni-app 到 ios、android 都没有复现你所说的问题,提供一个可复现的 demo。或者你运行下 hello uni-app 试试看

25年了 都没解决 佩服了

async loadSchoolData() {
var that = this;
uni.showLoading({
title: ‘加载中’,
icon: ‘loading’,
mask: true
});
var obj = {
“pageNo”: that.fromData.pageNo,
“pageSize”: 6,
“params”: {
“areaCode”: ‘’,
“cityCode”: that.userLocotionCity.id,
“educationCategoryId”: that.classHeading.id,
“provinceCode”: “”,
“schoolName”: that.fromData.name,
‘educationLevelId’: that.fromData.educationLevelId,
}
};
try {
that.statusMore = ‘loading’;
await miniCrgkSchoolList(obj).then(res => {
if (res) {
for (var i in res.records) {
if (res.records[i].signEndTime) {
res.records[i].signEndTime = formattedSignEndTime(res.records[i].signEndTime);
}
}
that.total = res.total;
that.schoolIist = that.schoolIist.concat(res.records);
that.statusMore = ‘more’;
uni.hideLoading(); // 移到 then 中
}
}).catch(error => {
console.error(‘请求失败:’, error);

                        uni.hideLoading(); // 移到 catch 中  
                    });  
                } catch (error) {  
                    console.error('请求失败:', error);  

                    uni.hideLoading(); // 同步错误时也隐藏 loading  
                }  
            },<br>

提供一个简单可复现的 demo 我看看

这是一个已知的 uni-app 在 Vue3 环境下的兼容性问题。在 App 平台,uni.showLoading 在某些情况下会自动关闭,主要原因是底层原生实现与 Vue3 的生命周期或响应式系统存在冲突。

问题分析:

  1. 平台差异:H5 平台基于浏览器 API 实现,行为稳定;App 平台依赖原生封装,在 Vue3 环境下可能出现异常。
  2. 自动关闭机制:部分原生实现为防止 loading 长期阻塞,内置了超时自动关闭逻辑(通常约 2 秒),但未在文档中明确说明。
  3. Vue3 响应式影响:Vue3 的响应式系统可能干扰原生方法的执行时序,导致原生层错误触发关闭。

临时解决方案:

  • 使用定时器轮询:通过 setInterval 定期重新调用 showLoading,强制保持显示状态。
    let loadingTimer = null
    function keepLoading() {
      uni.showLoading({ title: '处理中' })
      loadingTimer = setInterval(() => {
        uni.showLoading({ title: '处理中' })
      }, 1500) // 间隔小于 2 秒
    }
    // 结束时调用 clearInterval(loadingTimer) 和 uni.hideLoading()
回到顶部