Vue?中?Promise?的then方法異步使用及async/await?異步使用總結(jié)
1.Promise 的 then 方法使用
then 方法是 Promise 中 處理的是異步調(diào)用,異步調(diào)用是非阻塞式的,在調(diào)用的時(shí)候并不知道它什么時(shí)候結(jié)束,也就不會(huì)等到他返回一個(gè)有效數(shù)據(jù)之后再進(jìn)行下一步處理;
想了解 Promise 的使用,可以看這篇文章: ES6 中 Promise對(duì)象使用學(xué)習(xí)
使用示例:
new Promise(function (resolve, reject) {
resolve(1);
}).then(console.log);
console.log(2);
// 2
// 1Promise 的回調(diào)函數(shù)屬于異步任務(wù),會(huì)在同步任務(wù)之后執(zhí)行。上面代碼會(huì)先輸出2,再輸出1。因?yàn)閏onsole.log(2)是同步任務(wù),而then的回調(diào)函數(shù)屬于異步任務(wù),一定晚于同步任務(wù)執(zhí)行?! ?/strong>
但是,Promise 的回調(diào)函數(shù)不是正常的異步任務(wù),而是微任務(wù)(microtask)。它們的區(qū)別在于,正常任務(wù)追加到下一輪事件循環(huán),微任務(wù)追加到本輪事件循環(huán)。這意味著,微任務(wù)的執(zhí)行時(shí)間一定早于正常任務(wù)。
setTimeout(function() {
console.log(1);
}, 0);
new Promise(function (resolve, reject) {
resolve(2);
}).then(console.log);
console.log(3);
// 3
// 2
// 1 上面代碼的輸出結(jié)果是321。這說明then的回調(diào)函數(shù)的執(zhí)行時(shí)間,早于setTimeout(fn, 0)。因?yàn)?code>then是本輪事件循環(huán)執(zhí)行,setTimeout(fn, 0)在下一輪事件循環(huán)開始時(shí)執(zhí)行。
所以在 使用Promise 的then方法時(shí),一定要考慮 業(yè)務(wù)的處理邏輯,是否需要串行執(zhí)行,如果需要串行執(zhí)行,就要避免 后續(xù)的任務(wù) 早于 異步的任務(wù)執(zhí)行結(jié)束
2. async await 使用
使用 async 與 await 可以解決多個(gè)異步任務(wù)執(zhí)行時(shí)的串行執(zhí)行,也可以解決 Promise 使用 then 方法 異步執(zhí)行的流程控制
可以使用 async 和 await來得到我們的返回值
async關(guān)鍵詞用于函數(shù)上(async函數(shù)的返回值是Promise實(shí)例對(duì)象)
await關(guān)鍵子用于async函數(shù)當(dāng)中(await可以得到異步的結(jié)果)
Promise構(gòu)造函數(shù)的參數(shù)是一個(gè)函數(shù),函數(shù)里面的代碼是異步的,即Promise里面的操作,和Promise()外面的操作時(shí)異步"同時(shí)"進(jìn)行的。此外,只要在函數(shù)前面加上async 關(guān)鍵字,也可以指明函數(shù)是異步的。
async關(guān)鍵字實(shí)際是通過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ù)里面。
//寫一個(gè)async 函數(shù),從而可以使用await 關(guān)鍵字, await 后面放置的就是返回promise對(duì)象的一個(gè)表達(dá)式
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
}3. async/await處理多個(gè)異步請(qǐng)求
第一個(gè)異步請(qǐng)求的結(jié)果
可以作為第二個(gè)異步請(qǐng)求內(nèi)部的參數(shù),進(jìn)行判斷等數(shù)據(jù)操作。
形成鏈?zhǔn)疥P(guān)系
示例:
function getSomething() {
return "something";
}
async function testAsync() {
return Promise.resolve("hello async");
}
async function test() {
const v1 = await getSomething();
const v2 = await testAsync();
console.log(v1, v2);
}
test();執(zhí)行的結(jié)果如圖所示:

這種寫法可以保證的執(zhí)行順序;
到此這篇關(guān)于Vue 中 Promise 的then方法異步使用及async/await 異步使用總結(jié)的文章就介紹到這了,更多相關(guān)Promise 的 then 方法使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue?async?await?promise等待異步接口執(zhí)行完畢再進(jìn)行下步操作教程
- VUE獲取Promise對(duì)象中PromiseResult中的數(shù)據(jù)(最新推薦)
- vue循環(huán)中調(diào)用接口-promise.all();按順序執(zhí)行異步處理方式
- web前端Vue報(bào)錯(cuò):Uncaught?(in?promise)?TypeError:Cannot?read?properties?of?nu解決
- Vue Promise解決回調(diào)地獄問題實(shí)現(xiàn)方法
- vue關(guān)于Promise的使用方式
相關(guān)文章
詳解從新建vue項(xiàng)目到引入組件Element的方法
本篇文章主要介紹了詳解從新建vue項(xiàng)目到引入組件Element的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
Vue.js組件實(shí)現(xiàn)選項(xiàng)卡以及切換特效
這篇文章主要為大家詳細(xì)介紹了Vue.js組件實(shí)現(xiàn)選項(xiàng)卡以及切換特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
vue項(xiàng)目實(shí)現(xiàn)對(duì)某個(gè)區(qū)域繪制水印
這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目實(shí)現(xiàn)對(duì)某個(gè)區(qū)域繪制水印,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Vue3+vuedraggable實(shí)現(xiàn)動(dòng)態(tài)配置頁面
這篇文章主要為大家詳細(xì)介紹了Vue3如何利用vuedraggable實(shí)現(xiàn)動(dòng)態(tài)配置頁面,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-12-12
vue2如何使用face-api.js實(shí)現(xiàn)人臉識(shí)別功能
本文介紹了如何在Vue.js項(xiàng)目中利用face-api.js實(shí)現(xiàn)人臉識(shí)別功能,首先需要安裝Vue.js和face-api.js以及其依賴TensorFlow.js,接著,下載并配置必要的模型文件到項(xiàng)目目錄,之后,將人臉識(shí)別功能封裝成Vue組件,并在組件中通過視頻流進(jìn)行人臉檢測和結(jié)果展示2024-09-09
vue實(shí)現(xiàn)ToDoList簡單實(shí)例
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)ToDoList簡單實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02

