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 String对象中常用方法小结(字符串操作)
Jan 27 Javascript
javascript中的事件代理初探
Mar 08 Javascript
JavaScript清空数组元素的两种方法简单比较
Jul 10 Javascript
javascript密码强度校验代码(两种方法)
Aug 10 Javascript
javascript下使用Promise封装FileReader
Feb 19 Javascript
浅谈js中StringBuffer类的实现方法及使用
Sep 02 Javascript
Bootstrap3 多选和单选框(checkbox)
Dec 29 Javascript
vue快捷键与基础指令详解
Jun 01 Javascript
js实现可以点击收缩或张开的悬浮窗
Sep 18 Javascript
JavaScript实现简单的文本逐字打印效果示例
Apr 12 Javascript
详解基于electron制作一个node压缩图片的桌面应用
Jan 29 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
May 15 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
function.inc.php超越php
2006/12/09 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
如何运行Python程序的方法
2013/04/21 Python
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
如何使用python操作vmware
2019/07/27 Python
Python内置加密模块用法解析
2019/11/25 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
django使用JWT保存用户登录信息
2020/04/22 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
致百米运动员广播稿
2014/01/29 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
公司委托书格式
2014/08/01 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
大学生实训报告总结
2014/11/05 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书