使用async await 封裝 axios

es6 的promise 逐步解決了層層回調(diào)的問題,es8的async await讓異步變成了同步的寫法,在vue中,可以通過封裝axios,使得所有的請求都可以使用同步寫法,同時處理錯誤信息等,可以建一個api.js文件,全局創(chuàng)建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('服務(wù)器出錯')
      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('服務(wù)器出錯')
      console.log(err)
    }
  },
}
export { api }

上述代碼中,首先采用try,catch 捕獲請求的錯誤, 如果網(wǎng)絡(luò)狀態(tài)差,服務(wù)器錯誤等 ,然后在請求成功狀態(tài)中,亦可統(tǒng)一處理請求代碼,這個可以根據(jù)具體項目處理,上例表示code=0的時候為結(jié)果正確狀態(tài).
使用可以參考如下,以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這種,已經(jīng)將toast這種做成了插件,可以直接用this示例打開彈窗

<template>
  <el-button type="text" @click="open">點擊打開 Message Box</el-button>
</template>

<script>
  export default {
    methods: {
      open() {
        this.$alert('這是一段內(nèi)容', '標題名稱', {
          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的情況下,調(diào)用 window.wm.$alert,這樣就可以借用vue的插件形式調(diào)用彈窗組件了.
如果沒有這種用this調(diào)用的 彈窗組件,我們也可以寫一個放在app.vue下, 然后通過vuex全局控制,
那么可以在api.js中引入store

import store from '../store'

在catch 或者 resolve條件下

store.commit('showDialog',{true,'請求出錯'})

查看原文https://blog.noob6.com/2018/07/07/async-await-with-axios/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渊额,一起剝皮案震驚了整個濱河市沿猜,隨后出現(xiàn)的幾起案子峡扩,更是在濱河造成了極大的恐慌均驶,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機标沪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗜傅,“玉大人金句,你說我怎么就攤上這事÷类郑” “怎么了违寞?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長偶房。 經(jīng)常有香客問我趁曼,道長,這世上最難降的妖魔是什么棕洋? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任挡闰,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摄悯。我一直安慰自己赞季,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布奢驯。 她就那樣靜靜地躺著申钩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘪阁。 梳的紋絲不亂的頭發(fā)上典蜕,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音罗洗,去河邊找鬼。 笑死钢猛,一個胖子當(dāng)著我的面吹牛伙菜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播命迈,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼贩绕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壶愤?” 一聲冷哼從身側(cè)響起淑倾,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎征椒,沒想到半個月后娇哆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡勃救,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年碍讨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒙秒。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡勃黍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晕讲,到底是詐尸還是另有隱情覆获,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布瓢省,位于F島的核電站弄息,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏净捅。R本人自食惡果不足惜疑枯,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛔六。 院中可真熱鬧荆永,春花似錦废亭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骂删,卻和暖如春掌动,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宁玫。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工粗恢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欧瘪。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓眷射,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佛掖。 傳聞我的和親對象是個殘疾皇子妖碉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容