axios简单实现小程序延时loading指示


Posted in Javascript onJuly 30, 2018

axios简单实现小程序延时loading指示

axios简单实现小程序延时loading指示

小程序和小游戏的wx.showLoading方法相信大家都不会陌生,但是怎样处理loading才能又更好的用户体验呢?

假设需求如下,1秒类请求没有相应,才弹出loading,否则不弹出,请求错误时,弹出toast。

配合axios实现如下:

1.在状态管理部分存储loading状态

export const loadingStatus$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false)

axios.interceptors.request.use(
 (config: any) => {
  loadingStatus$.next(true)
  return config
 },
 (error: any) => {
  return Promise.reject(error)
 },
)

axios.interceptors.response.use(
 (response: any) => {
  loadingStatus$.next(false)
  return response.data
 },
 (error: any) => {
  loadingStatus$.next(false)
  wx.showToast({ title: 'something wrong happened, please try it later' })
  return Promise.reject(error)
 },
)

2.在应用启动时订阅

let timer: any = 0
loadingStatus$
.pipe(
 pairwise(),
 filter((res: Array<boolean>) => {
  if (res[0] !== res[1]) {
   return true
  } else {
   return false
  }
 }),
 map((res: Array<boolean>) => {
  return res[1]
 }),
)
.subscribe((res: boolean) => {
 // once changed, value must be distinct
 if (timer === 0) {
  timer = setTimeout(() => {
   wx.showLoading({ title: 'loading...' })
  }, 1000)
 } else {
  clearTimeout(timer)
  timer=0
  wx.hideLoading()
 }
})

感觉配合rx,很多复杂功能都能很简单地实现,另外这个功能会伴随整个应用周期,所以unsbscribe可以不用太在意。(除非有其他的bad effect,请告诉我)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解析JavaScript面向对象概念中的Object类型与作用域
May 10 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
Jul 09 Javascript
JavaScript中自带的 reduce()方法使用示例详解
Aug 10 Javascript
javaScript如何跳出多重循环break、continue
Sep 01 Javascript
js实现华丽的九九乘法表效果
Mar 29 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
Jul 10 Javascript
在vue项目中,使用axios跨域处理
Mar 07 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
vue内置组件transition简单原理图文详解(小结)
Jul 12 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
Apr 08 Javascript
JavaScript实现答题评分功能页面
Jun 24 Javascript
二维码条形码生成的JavaScript脚本库
Jul 07 Javascript
JS实现HTML页面中动态显示当前时间完整示例
Jul 30 #Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
Jul 30 #Javascript
js+html5实现手机九宫格密码解锁功能
Jul 30 #Javascript
vscode中vue-cli项目es-lint的配置方法
Jul 30 #Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
Jul 30 #Javascript
JavaScript笛卡尔积超简单实现算法示例
Jul 30 #Javascript
angular-tree-component的使用详解
Jul 30 #Javascript
You might like
自己前几天写的无限分类类
2007/02/14 PHP
PHP 动态随机生成验证码类代码
2010/04/09 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
php实现文件上传基本验证
2020/03/04 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
js实现日历与定时器
2017/02/22 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
python使用scrapy解析js示例
2014/01/23 Python
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
简单了解python模块概念
2018/01/11 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
python游戏地图最短路径求解
2019/01/16 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
列车长先进事迹材料
2014/01/25 职场文书
研修心得体会
2014/09/04 职场文书