Vue之Axios的異步請求問題詳解
遇到的問題
在目前一個需求中,我需要等待axios請求完成后,判斷請求是否出現(xiàn)異常,然后來判斷是否關(guān)閉彈窗
修改后大概代碼如下:
async submitForm() {
let flag = false
//表單驗證,默認通過
let formValidation = true
this.$refs['vForm'].validate(valid => {
if (!valid){
formValidation = false
}
//TODO: 提交表單
})
if (formValidation === true){
//這里需要使用await,否則不會等待該方法運行完成
await insertIllegalInfo(this.formData).then(res=>{
this.$message.success("新增成功")
flag = true
console.log("新增成功了")
console.log(flag)
})
}
console.log("提交馬上返回了")
console.log(flag)
return flag
},
原來在方法中沒有使用async和await,由于發(fā)送的axios請求是異步請求,所以在請求還沒完成的時候submitForm這個方法就已經(jīng)將flag返回了
這就導致了一個問題,如果我在后端在處理請求的時候出現(xiàn)異常,我在這里無法進行處理
經(jīng)過百度搜索,發(fā)現(xiàn)使用async+await能夠解決該問題,將異步方法改為同步方法,在方法前面加上async進行修飾,然后在axios請求前使用await進行修飾即可,這樣就不會出現(xiàn)異步的問題

這個問題解決后,又出現(xiàn)了一個新的問題,就是我在這里不是返回了一個flag嗎,我在另外一個vue頁面中需要獲取到return返回的這個flag,但是按照正常步驟獲取不到
后來經(jīng)過查詢資料后發(fā)現(xiàn)了原因,如下:
- async 是一個修飾符,async 定義的函數(shù)會默認的返回一個Promise對象resolve的值,因此對async函數(shù)可以直接進行then操作,返回的值即為then方法的傳入函數(shù)。
- await 也是一個修飾符,await 關(guān)鍵字 只能放在 async 函數(shù)內(nèi)部, await關(guān)鍵字的作用 就是獲取 Promise中返回的內(nèi)容, 獲取的是Promise函數(shù)中resolve或者reject的值。
- async/await 是一種編寫異步代碼的新方法。之前異步代碼的方案是回調(diào)和 promise。
- async/await 是建立在 promise 的基礎(chǔ)上。(如果對Promise不熟悉,我已經(jīng)著手在寫Promise的文章了)
- async/await 像 promise 一樣,也是非阻塞的。
- async/await 讓異步代碼看起來、表現(xiàn)起來更像同步代碼。這正是其威力所在。
主要原因就是async 定義的函數(shù)會默認的返回一個Promise對象resolve的值,所以我們需要使用then去進行取值,如下
submitInsertIllegalInfoDialog(){
//重要的是這里,這里調(diào)用了上面說的的submitForm方法
this.$refs.insertIllegalInfoDialog.submitForm().then(flag=>{
console.log(flag)
if (flag === true){
console.log("馬上關(guān)閉彈窗了")
//這個是來關(guān)閉彈窗的
this.insertIllegalInfoDialogVisible = false
console.log("重新查詢")
this.getIllegalInfoList()
this.$refs.insertIllegalInfoDialog.resetForm();
}
})
},
總結(jié)
學會async和await的使用能夠讓我在開發(fā)vue項目的時候更加靈活,之后在遇到axios異步請求沖突的時候可以參考本篇文章進行解決
到此這篇關(guān)于Vue之Axios的異步請求問題詳解的文章就介紹到這了,更多相關(guān)Vue Axios異步請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
electron-vue?運行報錯?Object.fromEntries?is?not?a?function
Object.fromEntries()?是?ECMAScript?2019?新增的一個靜態(tài)方法,用于將鍵值對列表(如數(shù)組)轉(zhuǎn)換為對象,如果在當前環(huán)境中不支持該方法,可以使用?polyfill?來提供類似功能,接下來通過本文介紹electron-vue?運行報錯?Object.fromEntries?is?not?a?function的解決方案2023-05-05
Vue用Export2Excel導出excel,多級表頭數(shù)據(jù)方式
這篇文章主要介紹了Vue用Export2Excel導出excel,多級表頭數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
vue draggable resizable 實現(xiàn)可拖拽縮放的組件功能
這篇文章主要介紹了vue draggable resizable 實現(xiàn)可拖拽縮放的組件功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
VUE使用localstorage和sessionstorage實現(xiàn)登錄示例詳解
這篇文章主要為大家介紹了VUE使用localstorage和sessionstorage實現(xiàn)登錄示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
Vue中keep-alive 實現(xiàn)后退不刷新并保持滾動位置
這篇文章主要介紹了Vue中keep-alive 實現(xiàn)后退不刷新并保持滾動位置的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

