使用async await 封装 axios的方法

2018-09-26 20:09

阅读:571

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

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


评论


亲,登录后才可以留言!