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 相关文章推荐
jquery弹出层类代码分享
Dec 27 Javascript
JS执行删除前的判断代码
Feb 18 Javascript
js获取form的方法
May 06 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
Feb 16 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
js canvas实现简单的图像扩散效果
Jun 28 Javascript
Vue.js 动态为img的src赋值方法
Mar 14 Javascript
微信小程序获取音频时长与实时获取播放进度问题
Aug 28 Javascript
js 实现 list转换成tree的方法示例(数组到树)
Aug 18 Javascript
d3.js实现图形拖拽
Dec 19 Javascript
js制作提示框插件
Dec 24 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/01/07 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
Python动态加载模块的3种方法
2014/11/22 Python
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
通信生自我鉴定
2014/01/18 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
写给领导的感谢信
2015/01/22 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
7个关于Python的经典基础案例
2021/11/07 Python