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中定义对象类别
Dec 22 Javascript
Locate a File Using a File Open Dialog Box
Jun 18 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
Aug 29 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
Jan 20 Javascript
js实现图片旋转的三种方法
Apr 10 Javascript
jquery如何获取元素的滚动条高度等实现代码
Oct 19 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
May 09 Javascript
理解 javascript 中的函数表达式与函数声明
Jul 07 Javascript
详解vue中使用express+fetch获取本地json文件
Oct 10 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
May 28 Javascript
一看就会的vuex实现登录验证(附案例)
Jan 09 Javascript
JS实现炫酷雪花飘落效果
Aug 19 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随机生成数字字母组合的方法
2015/03/18 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
js对象基础实例分析
2015/01/13 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
Python数学形态学实例分析
2019/09/06 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
python实现扫雷小游戏
2020/04/24 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
蛋白质世界:Protein World
2017/11/23 全球购物
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
一位农村小子的自荐信
2014/04/07 职场文书
植树节标语
2014/06/27 职场文书
小学课外阅读总结
2014/07/09 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
工作自我评价范文
2015/03/05 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL