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 &amp;&amp;和||运算法的另类使用技巧
Nov 28 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
Mar 09 Javascript
js调用后台servlet方法实例
Jun 09 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
AngularJS学习笔记之基本指令(init、repeat)
Jun 16 Javascript
JavaScript的jQuery库中ready方法的学习教程
Aug 14 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
bootstrap IE8 兼容性处理
Mar 22 Javascript
基于JavaScript中字符串的match与replace方法(详解)
Dec 04 Javascript
vue-router传参用法详解
Jan 19 Javascript
如何基于js判断浏览器版本
Feb 20 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 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中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
Firefox div高度自适应
2009/04/28 Javascript
js中的string.format函数代码
2020/08/11 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
Python标准库os.path包、glob包使用实例
2014/11/25 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
python创建n行m列数组示例
2019/12/02 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
加拿大时装零售商:Influence U
2018/12/22 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
老教师工作总结的自我评价
2013/09/27 职场文书
科级干部考察材料
2014/02/15 职场文书
办理收楼委托书范本
2014/10/09 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
微信搭讪开场白
2015/05/28 职场文书
关于公司年会的开幕词
2016/03/04 职场文书