使用async await 封装 axios的方法


Posted in Javascript onJuly 09, 2018

es6 的promise 逐步解决了层层回调的问题,es8的async await让异步变成了同步的写法,在vue中,可以通过封装axios,使得所有的请求都可以使用同步写法,同时处理错误信息等,可以建一个api.js文件,全局创建api实例.

import axios from 'axios'
const qs = require('qs')
const api = {
 async get (url, data) {
  try {
   let res = await axios.get(url, {params: data})
   res = res.data
   return new Promise((resolve) => {
    if (res.code === 0) {
     resolve(res)
    } else {
     resolve(res)
    }
   })
  } catch (err) {
   alert('服务器出错')
   console.log(err)
  }
 },
 async post (url, data) {
  try {
   let res = await axios.post(url, qs.stringify(data))
   res = res.data
   return new Promise((resolve, reject) => {
    if (res.code === 0) {
     resolve(res)
    } else {
     reject(res)
    }
   })
  } catch (err) {
   // return (e.message)
   alert('服务器出错')
   console.log(err)
  }
 },
}
export { api }

上述代码中,首先采用try,catch 捕获请求的错误, 如果网络状态差,服务器错误等 ,然后在请求成功状态中,亦可统一处理请求代码,这个可以根据具体项目处理,上例表示code=0的时候为结果正确状态.

使用可以参考如下,以vue项目为例:

import { api } from 'common/js/api'

export default {
 data () {
  return {
   list: [],
  }
 },
 created () {
  this.getList()
 },
 methods: {
  async getList () {
   let {data} = await api.get('/ferring/test/list')
   console.log(data)
   this.list = data
  }
 },
}

有时候我们可能想比如错误处理能通过vue的一些组件比如toast这样的弹出,但是这个api.js不是在项目中,那该如何用呢, 下面以vue项目为例简述:

有些ui库,比如element ui这种,已经将toast这种做成了插件,可以直接用this示例打开弹窗

<template>
 <el-button type="text" @click="open">点击打开 Message Box</el-button>
</template>

<script>
 export default {
  methods: {
   open() {
    this.$alert('这是一段内容', '标题名称', {
     confirmButtonText: '确定',
     callback: action => {
      this.$message({
       type: 'info',
       message: `action: ${ action }`
      });
     }
    });
   }
  }
 }
</script>

以上代码摘自element Ui ,如果想全局处理,在api.js中,如何获取vue的this示例呢,在main.js里面,可以将vue实例挂载在window对象上

/* eslint-disable no-new */
window.wm = new Vue({
 el: '#app',
 router,
 render: h => h(App),
})

那么回到刚刚的api.js ,则可以直接在resolve 或者catch的情况下,调用 window.wm.$alert,这样就可以借用vue的插件形式调用弹窗组件了.

如果没有这种用this调用的 弹窗组件,我们也可以写一个放在app.vue下, 然后通过vuex全局控制,

那么可以在api.js中引入store

import store from '../store'

在catch 或者 resolve条件下

store.commit('showDialog',{true,'请求出错'})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS accordion布局
Oct 08 Javascript
js几个验证函数代码
Mar 25 Javascript
javascript延时加载之defer测试
Dec 28 Javascript
javascript级联下拉列表实例代码(自写)
May 10 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
批量修改标签css样式以input标签为例
Jul 31 Javascript
日常收藏的jquery技巧
Dec 02 Javascript
js实现横向拖拽导航条功能
Feb 17 Javascript
基于JS脚本语言的基础语法详解
Jul 22 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
Aug 29 Javascript
详解JavaScript 异步编程
Jul 13 Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 #Javascript
jQuery实现简单复制json对象和json对象集合操作示例
Jul 09 #jQuery
JS实现图片旋转动画效果封装与使用示例
Jul 09 #Javascript
JavaScript的Object.defineProperty详解
Jul 09 #Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
Jul 08 #Javascript
mac上配置Android环境变量的方法
Jul 08 #Javascript
vue.js使用watch监听路由变化的方法
Jul 08 #Javascript
You might like
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
javascript fullscreen全屏实现代码
2009/04/09 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
Vue实现日历小插件
2019/06/26 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
python数据挖掘需要学的内容
2019/06/23 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
Python插件机制实现详解
2020/05/04 Python
聊聊python中的异常嵌套
2020/09/01 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
人力资源管理专业应届生求职信
2013/09/28 职场文书
客服服务心得体会
2013/12/30 职场文书
大学生活自我评价
2014/04/09 职场文书
校园安全标语
2014/06/07 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
医院领导班子整改方案
2014/10/01 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android