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 1.5中使用deferred对象的代码(翻译)
Mar 10 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
jquery form 隐藏的input 选择
Apr 29 Javascript
JS限制文本框只能输入数字和字母方法
Feb 28 Javascript
简单谈谈Javascript中类型的判断
Oct 19 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
jQuery.Callbacks()回调函数队列用法详解
Jun 14 Javascript
Javascript中判断一个值是否为undefined的方法详解
Sep 28 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
Nov 14 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
Mar 07 Javascript
vue如何截取字符串
May 06 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
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
python logging通过json文件配置的步骤
2020/04/27 Python
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
物流仓管员岗位职责
2013/12/04 职场文书
合作意向书范本
2014/03/31 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
迎国庆主题班会
2015/08/17 职场文书
《小小的船》教学反思
2016/02/18 职场文书
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python