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 相关文章推荐
document.onreadystatechange事件的用法分析
Oct 17 Javascript
jQuery lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
Oct 30 Javascript
javascript全局变量封装模块实现代码
Nov 28 Javascript
判断滚动条到底部的JS代码
Nov 04 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 Javascript
详解JS函数重载
Dec 04 Javascript
限制上传文件大小和格式的jQuery插件实例
Jan 24 Javascript
javascript实现的多个层切换效果通用函数实例
Jul 06 Javascript
BootStrap tooltip提示框使用小结
Oct 26 Javascript
jQuery仿IOS弹出框插件
Feb 18 Javascript
js调用刷新界面的几种方式
May 03 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
php 正则表达式小结
2009/08/31 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
采用call方式实现js继承
2014/05/20 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
实践Vim配置python开发环境
2018/07/02 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
对祖国的寄语大全
2014/04/11 职场文书
开工仪式策划方案
2014/05/23 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
python实现简单的井字棋
2021/05/26 Python