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 相关文章推荐
js静态作用域的功能。
Dec 25 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
Jul 20 Javascript
浅谈JavaScript事件的属性列表
Mar 01 Javascript
jQuery选择器用法实例详解
Dec 17 Javascript
AngularJS 实现购物车全选反选功能
Oct 24 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
Nov 07 Javascript
深入理解ES6之数据解构的用法
Jan 13 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
Nov 06 Javascript
Angular Excel 导入与导出的实现代码
Apr 17 Javascript
对layui初始化列表的CheckBox属性详解
Sep 13 Javascript
ligerUI的ligerDialog关闭刷新的方法
Sep 27 Javascript
javascript实现点击产生随机图形
Jan 25 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
使用Apache的rewrite技术
2006/06/22 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
angularJS 入门基础
2015/02/09 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
vue下跨域设置的相关介绍
2017/08/26 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
js实现星星打分效果
2020/07/05 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
Python的一些用法分享
2012/10/07 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
Python创建自己的加密货币的示例
2021/03/01 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
会计专业大学生职业生涯规划书
2014/02/11 职场文书
升旗仪式主持词
2014/03/19 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
老师对学生的寄语
2014/04/09 职场文书
项目负责人任命书
2014/06/04 职场文书
贷款委托书怎么写
2014/08/02 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
Oracle使用别名的好处
2022/04/19 Oracle