uni-app request模块中 hideLoading应该放到clearTimeout之后

uni-app request模块中 hideLoading应该放到clearTimeout之后

信息类别 详情
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 win10
HBuilderX 正式版
HBuilderX版本 3.1.22
手机系统 Android
手机版本 Android 9.0
手机厂商 小米
手机机型 小米
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

  • 在安卓手机中多下拉加载几次会出现loading一直卡住

预期结果:

1

实际结果:

1

bug描述:

uni.hideLoading();
// 清除定时器,如果请求回来了,就无需loading
clearTimeout(this.config.timer);
this.config.timer = null;

应改为  
// 清除定时器,如果请求回来了,就无需loading
clearTimeout(this.config.timer);
this.config.timer = null;
uni.hideLoading()  
```

否则会存在隐藏加载框后 loading定时器启动了 导致loading一直存在
`

更多关于uni-app request模块中 hideLoading应该放到clearTimeout之后的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

bug描述中的代码是哪里的?

更多关于uni-app request模块中 hideLoading应该放到clearTimeout之后的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个正确的优化建议。在uni-app的请求封装中,定时器和loading控制的执行顺序确实很重要。

从代码逻辑来看:

  1. 如果先执行uni.hideLoading()再清除定时器,在极端情况下可能出现:loading被隐藏后,定时器回调才执行,又重新显示了loading
  2. clearTimeout放在前面能确保定时器被彻底清理,避免潜在的竞态条件

更完善的实现方式应该是:

// 先清除可能存在的定时器
if (this.config.timer) {
    clearTimeout(this.config.timer);
    this.config.timer = null;
}
// 再隐藏loading
uni.hideLoading();
回到顶部