79轩娶、vue 中 ajax請求封裝以及組件調用方法 ( async/await)

async/await
1)async/await場景
這是一個用同步的思維來解決異步問題的方案魄缚,當前端接口調用需要等到接口返回值以后渲染頁面時。
2)名詞解釋
(1)async
async的用法喜滨,它作為一個關鍵字放到函數前面捉捅,用于表示函數是一個異步函數,因為async就是異步的意思鸿市, 異步函數也就意味著該函數的執(zhí)行不會阻塞后面代碼的執(zhí)行锯梁, async 函數返回的是一個promise 對象即碗。
(2)await
await的含義為等待。意思就是代碼需要等待await后面的函數運行完并且有了返回結果之后陌凳,才繼續(xù)執(zhí)行下面的代碼剥懒。這正是同步的效果

例子如下:await要放在async中,并且await后面的函數運行后必須返回一個Promise對象才能實現(xiàn)同步的效果合敦。

1.api/ajax.js

import axios from 'axios'
 
export default function ajax(url = '',params = {} ,type = 'GET'){
  let promise;
  return new Promise((resolve ,reject)=>{
  //  判斷請求的方式
    if(type == 'GET'){
      let paramsStr = '';
      Object.keys(params).forEach( key=>{
        paramsStr += key+'='+params[key]+'&';
      })
      if(paramsStr != ''){
        paramsStr = paramsStr.substr(0,paramsStr.lastIndexOf('&'));
      }
      url+='?'+paramsStr;
      promise = axios.get(url);
    }else{
      promise = axios.post(url,params)
    }
    promise.then((res)=>{
      resolve(res.data)
    }).catch((err)=>{
      reject(err);
    })
  })
}

2.api/index.js

import ajax from './ajax'
 
const BASE_URL = 'https://localhost:3000/';
 
//請求方法
export const getHomeCasual = ()=>ajax(BASE_URL+'Homeapp.do');

3.組件中調用請求方法

import { getHomeCasual } from './../api/index'

created(){
  this.getHomeData();
},
methods:{
  // 請求數據  async/await=>異步轉為同步
  async getHomeData (){
      const result = await getHomeCasual();
      console.log(result);
  }
}

axios 常規(guī)用法

new Vue({
   el:"#app",
   created(){
      this.ajaxData();
   },
   mothods:{
      ajaxData(){
         const result = axios.get('/homeapp.do').then((res)=>{
                                  console.log(res);
                              })
                              .catch((err)=>{
                                  console.log(res);
                              })
      }
   }     
})   

axios 同步用法

new Vue({
   el:"#app",
   created(){
      this.ajaxData();
   },
   mothods:{
      async ajaxData(){
     try{
 const result = await axios.get('/homeapp.do');
         console.log(result);
}catch(e){
  alert('請求出錯了:'+e)
}
        
      }
   }     
})

上面會有點操作繁瑣每次請求回來的數據都要try--catch判斷接口如果很多的話很繁瑣
下面我們對ajax.js進行優(yōu)化我們把返回的reject(error)隱藏初橘,直接彈出報錯即可這樣大大減少了開發(fā)效率,
還有就是如果接口中沒有用到headers就可以直接刪掉(僅供參考)


export default function ajax (url, data={}, type='GET',headers) {
  //優(yōu)化處理請求異常這樣就不用在請求的地方用try catch判斷了充岛;這里新建一個promise在錯誤的時候不用返回reject(error)了
  return new Promise(function (resolve, reject) {
    // 執(zhí)行異步ajax請求
    let promise
    if (type === 'GET') {
      // 準備url query參數數據
      let dataStr = '' //數據拼接字符串
      Object.keys(data).forEach(key => {
        dataStr += key + '=' + data[key] + '&'
      })
      if (dataStr !== '') {
        dataStr = dataStr.substring(0, dataStr.lastIndexOf('&'))
        url = url + '?' + dataStr
      } `+`
      // 發(fā)送get請求
      promise = axios.get(url,headers)
    } else {
      // 發(fā)送post請求
      promise = axios.post(url, data,headers)
    }
    promise.then(function (response) {
      // 成功了調用resolve()
      resolve(response.data)
    }).catch(function (error) {
      //失敗了調用reject()
     alert('請求出錯了:'+e)
      //reject(error)
    })
  })
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末保檐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子崔梗,更是在濱河造成了極大的恐慌夜只,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒜魄,死亡現(xiàn)場離奇詭異扔亥,居然都是意外死亡,警方通過查閱死者的電腦和手機谈为,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門旅挤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伞鲫,你說我怎么就攤上這事粘茄。” “怎么了秕脓?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵柒瓣,是天一觀的道長。 經常有香客問我吠架,道長嘹朗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任诵肛,我火速辦了婚禮,結果婚禮上默穴,老公的妹妹穿的比我還像新娘怔檩。我一直安慰自己,他們只是感情好蓄诽,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布薛训。 她就那樣靜靜地躺著,像睡著了一般仑氛。 火紅的嫁衣襯著肌膚如雪乙埃。 梳的紋絲不亂的頭發(fā)上闸英,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音介袜,去河邊找鬼甫何。 笑死,一個胖子當著我的面吹牛遇伞,可吹牛的內容都是我干的辙喂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸠珠,長吁一口氣:“原來是場噩夢啊……” “哼巍耗!你這毒婦竟也來了?” 一聲冷哼從身側響起渐排,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤炬太,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驯耻,有當地人在樹林里發(fā)現(xiàn)了一具尸體亲族,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年吓歇,在試婚紗的時候發(fā)現(xiàn)自己被綠了孽水。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡城看,死狀恐怖女气,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情测柠,我是刑警寧澤炼鞠,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站轰胁,受9級特大地震影響谒主,放射性物質發(fā)生泄漏。R本人自食惡果不足惜赃阀,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一霎肯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榛斯,春花似錦观游、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至王凑,卻和暖如春搪柑,著一層夾襖步出監(jiān)牢的瞬間聋丝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工工碾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弱睦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓倚喂,卻偏偏與公主長得像每篷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子端圈,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容