vue中返回結(jié)果是promise的處理方式
返回結(jié)果是promise的處理
調(diào)用element-ui中提供的方法是,經(jīng)常返回結(jié)果類型對(duì)象是promise,
如果某個(gè)函數(shù)調(diào)用的結(jié)果打印后返回的是promise,就馬上用saync和await進(jìn)行優(yōu)化,async放到方法名稱的前面,await放到方法里面
對(duì)promise的一些理解
1.promise是一種異步解決方案
- 由于ajax異步方式請(qǐng)求數(shù)據(jù)時(shí),我們不能知道數(shù)據(jù)具體回來(lái)的事件,所以過(guò)去只能將一個(gè)callback函數(shù)傳遞給ajax封裝的方法,當(dāng)ajax異步請(qǐng)求完成時(shí),執(zhí)行callback函數(shù)。
- promise對(duì)象接受resolve和reject兩個(gè)參數(shù),當(dāng)一個(gè)異步動(dòng)作發(fā)生時(shí),promise對(duì)象會(huì)通過(guò)resolve完成對(duì)動(dòng)作成功進(jìn)行解析,reject會(huì)捕獲這個(gè)動(dòng)作的異常。一個(gè)promise對(duì)象,通過(guò)new Promise().then()執(zhí)行下一步驟操作。
- axios is a promise based HTTP client for the browser and node.js。也就是說(shuō),使用axios發(fā)出請(qǐng)求,難免涉及promise
Promise構(gòu)造函數(shù)的參數(shù)是一個(gè)函數(shù),函數(shù)里面的代碼是異步的,即Promise里面的操作,和Promise()外面的操作時(shí)異步"同時(shí)"進(jìn)行的。Promise中的函數(shù)的第一個(gè)參數(shù)是回調(diào)函數(shù),resolve用來(lái)觸發(fā)then里面的代碼,第二個(gè)參數(shù)是回調(diào)函數(shù),reject用來(lái)觸發(fā)catch中的代碼,throw new Error();也可以觸發(fā)catch,
- resolve和reject是兩個(gè)回調(diào)函數(shù),調(diào)用resolve會(huì)觸發(fā)then,reject會(huì)觸發(fā)catch
<script>
new Promise((resolve, reject) =>{
setTimeout(() =>{
//成功的時(shí)候調(diào)用resolve
resolve('成功data')
//失敗的時(shí)候調(diào)用reject
reject('error message')
}, 1000)
}).then((data) =>{
//處理成功后的邏輯
console.log(data);//這個(gè)data 是接收的resolve參數(shù)--
}).catch((err) =>{
console.log(err);
})
</script> - 在一個(gè)promise鏈中,只要任何一個(gè)promise被reject,promise鏈就被破壞了,reject之后的promise都不會(huì)再執(zhí)行,而是直接調(diào)用.catch方法。
p1().then(p2).then(p3)
.then(function(data) {
console.log('data: ' + data);
})
.catch(function(error) {
console.log('error: ' + error);
});
function p1() {
return new Promise(function(resolve, reject) {
console.log('p1 resolved');
resolve(123);
});
}
function p2() {
return new Promise(function(resolve, reject) {
console.log('p2 rejected');
reject(456);
});
}
function p3() {
return new Promise(function(resolve, reject) {
console.log('p3 resolved');
resolve(789);
});
}// 執(zhí)行結(jié)果p1 resolvedp2 rejectederror: 4562.async await
Promise構(gòu)造函數(shù)的參數(shù)是一個(gè)函數(shù),函數(shù)里面的代碼是異步的,即Promise里面的操作,和Promise()外面的操作時(shí)異步"同時(shí)"進(jìn)行的。此外,只要在函數(shù)前面加上async 關(guān)鍵字,也可以指明函數(shù)是異步的。
async關(guān)鍵字實(shí)際是通過(guò)Promise實(shí)現(xiàn),如果async 函數(shù)中有返回一個(gè)值 ,當(dāng)調(diào)用該函數(shù)時(shí),內(nèi)部會(huì)調(diào)用Promise.solve() 方法把它轉(zhuǎn)化成一個(gè)promise 對(duì)象作為返回,但如果timeout 函數(shù)內(nèi)部拋出錯(cuò)誤,那么就會(huì)調(diào)用Promise.reject() 返回一個(gè)promise 對(duì)象。若某函數(shù)調(diào)用一個(gè)異步函數(shù)(比如內(nèi)部含有primise),該函數(shù)應(yīng)用async修飾。
await表示“等待”,修飾返回promise 對(duì)象的表達(dá)式。注意await 關(guān)鍵字只能放到async 函數(shù)里面。
function doubleAfter2seconds(num) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2 * num)
}, 2000);
} )
}//寫(xiě)一個(gè)async?函數(shù),從而可以使用await?關(guān)鍵字, await?后面放置的就是返回promise對(duì)象的一個(gè)表達(dá)式,所以它后面可以寫(xiě)上?doubleAfter2seconds?函數(shù)的調(diào)用
async function testResult() {
let result = await doubleAfter2seconds(30);
console.log(result);
}await 等待后面的promise對(duì)象執(zhí)行完畢,然后拿到promise resolve 的值并進(jìn)行返回。顯然await可以修飾axios請(qǐng)求,等待得到結(jié)果再往下進(jìn)行,如:
async getUserList(){
const {data: res} = await this.$http.get('users', {
params: this.queryInfo
})
//console.log(res)
if (res.meta.status !== 200) return this.$message.error('獲取用戶列表失敗! ')
this.userlist = res.data.users
this.total = res.data.total
}以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vuejs 制作背景淡入淡出切換動(dòng)畫(huà)的實(shí)例
今天小編就為大家分享一篇vuejs 制作背景淡入淡出切換動(dòng)畫(huà)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Vue動(dòng)態(tài)設(shè)置img的src不生效的問(wèn)題解決
本文主要介紹了Vue動(dòng)態(tài)設(shè)置img的src不生效的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
vue js秒轉(zhuǎn)天數(shù)小時(shí)分鐘秒的實(shí)例代碼
這篇文章主要介紹了vue js秒轉(zhuǎn)天數(shù)小時(shí)分鐘秒的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08
element中form組件prop嵌套屬性的問(wèn)題解決
本文主要介紹了element中form組件prop嵌套屬性的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
解決vue3項(xiàng)目打包發(fā)布到服務(wù)器后訪問(wèn)頁(yè)面顯示空白問(wèn)題
這篇文章主要介紹了解決vue3項(xiàng)目打包發(fā)布到服務(wù)器后訪問(wèn)頁(yè)面顯示空白問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
vue項(xiàng)目頁(yè)面嵌入代碼塊vue-prism-editor的實(shí)現(xiàn)
這篇文章主要介紹了vue項(xiàng)目頁(yè)面嵌入代碼塊vue-prism-editor的實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
vue.js源代碼core scedule.js學(xué)習(xí)筆記
這篇文章主要為大家詳細(xì)介紹了vue.js源代碼core scedule.js的學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
基于vue 添加axios組件,解決post傳參數(shù)為null的問(wèn)題
下面小編就為大家分享一篇基于vue 添加axios組件,解決post傳參數(shù)為null的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
利用vueJs實(shí)現(xiàn)圖片輪播實(shí)例代碼
本篇文章主要介紹了利用vueJs實(shí)現(xiàn)圖片輪播實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
Vue實(shí)現(xiàn)移除數(shù)組中特定元素的方法小結(jié)
這篇文章主要介紹了Vue如何優(yōu)雅地移除數(shù)組中的特定元素,文中介紹了單個(gè)去除和批量去除的操作方法,并通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-03-03

