Vue-如何使用axios實現同步請求

 在vue項目中我們經常會使用axios來與後臺進行數據傳輸,異步請求可以改善用戶體驗。但是在某些特殊情況,我們依然需要使用同步請求來實現交互。本文將講解如何在vue項目中使用axios實現同步問題分析我們知道,在傳統的ajax方法中,我們可以使用參數async設置爲false來表示同步請求

$.ajax({
    type : "POST", //請求方式
    async: false, // fasle表示同步請求,true表示異步請求
    contentType: "application/json;charset=UTF-8", //請求的媒體類型
    url : "http://127.0.0.1/admin/list/",//請求地址
    data : JSON.stringify(list), //數據,json字符串
    success : function(result) { //請求成功
        console.log(result);
    },
    error : function(e){  //請求失敗,包含具體的錯誤信息
        console.log(e.status);
        console.log(e.responseText);
    }
});

但是在axios的文檔中,並沒有找到類似的參數。因此單純的通過axios是實現不了同步數據交互。

在瀏覽了其它博客後,瞭解到ES7的異步特性async / await,async修飾的異步方法,需要等待await修飾的語句執行完畢。這跟我們想要的同步請求效果一樣,在執行完A事件,併成功返回後,纔會去執行B事件。

還有一種方法就是在vue項目中安裝jquery,使用jquery的async屬性,但是不太推薦。

ES7的異步特性async / await

async用於申明一個函數是異步的,await等待異步請求完成,await只能在async方法中使用。

var fun1 = async function(){
    await axios.get(url,params);
<span class="token punctuation">.<span class="token punctuation">.<span class="token punctuation">.

}

在調用fun1的方法中我們需要修飾爲async異步方法,並且await修飾fun1方法。

var fun2 = async function(){
    await fun1();
}

在Vue項目中實現

getInfoFn: async function(){
    var that = this;
    await that.$api.scheduleApi.queryScheduleInfoFn(
      {caseNo:  that.basicInfo.caseNo}).then(function (response) {
      if(response.data.code == '200') {
        var result = response.data.result;
      }
    });
},

// 調用getInfoFn()也需要修飾爲異步
changeConfigFn: async function(config){

<span class="token keyword"><span class="hljs-keyword">await</span> <span class="token keyword"><span class="hljs-keyword">this</span><span class="token punctuation">.<span class="token function">getSheduleInfoFn<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;

<span class="token comment"><span class="hljs-comment">// 執行其它操作</span>

}

這樣我們可以等待數據返回成功後,執行其它操作了

總結

本文簡單的介紹瞭如何使用ES7的異步特性async / await來實現axios進行同步請求了。

轉載於:https://www.jianshu.com/p/93f011981a47
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章