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 入门基础学习
Mar 10 Javascript
jQuery版Tab标签切换
Mar 16 Javascript
javascript实用小函数使用介绍
Nov 11 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
Oct 27 Javascript
canvas红包照片实例分享
Feb 28 Javascript
jQuery上传多张图片带进度条样式(DEMO)
Mar 02 Javascript
jQuery判断邮箱格式对错实例代码讲解
Apr 12 jQuery
vuejs router history 配置到iis的方法
Sep 20 Javascript
Vue的编码技巧与规范使用详解
Aug 28 Javascript
Javascript实现打鼓效果
Jan 29 Javascript
node.js文件的复制、创建文件夹等相关操作
Feb 05 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
yii框架无限极分类的实现方法
2017/04/08 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
python制作最美应用的爬虫
2015/10/28 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
python 如何区分return和yield
2020/09/22 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
销售主管竞聘书
2014/03/31 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
linux下安装redis图文详细步骤
2021/12/04 Redis