欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue?中?Promise?的then方法異步使用及async/await?異步使用總結(jié)

 更新時(shí)間:2023年01月12日 08:42:13   作者:香吧香  
then?方法是?Promise?中?處理的是異步調(diào)用,異步調(diào)用是非阻塞式的,在調(diào)用的時(shí)候并不知道它什么時(shí)候結(jié)束,也就不會等到他返回一個(gè)有效數(shù)據(jù)之后再進(jìn)行下一步處理,這篇文章主要介紹了Vue?中?Promise?的then方法異步使用及async/await?異步使用總結(jié),需要的朋友可以參考下

1.Promise 的 then 方法使用  

  then 方法是 Promise 中 處理的是異步調(diào)用,異步調(diào)用是非阻塞式的,在調(diào)用的時(shí)候并不知道它什么時(shí)候結(jié)束,也就不會等到他返回一個(gè)有效數(shù)據(jù)之后再進(jìn)行下一步處理;

  想了解 Promise 的使用,可以看這篇文章: ES6 中 Promise對象使用學(xué)習(xí) 

  使用示例:

new Promise(function (resolve, reject) {
  resolve(1);
}).then(console.log);
 
console.log(2);
// 2
// 1

  Promise 的回調(diào)函數(shù)屬于異步任務(wù),會在同步任務(wù)之后執(zhí)行。上面代碼會先輸出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í)例對象)

    • 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)部會調(diào)用Promise.solve() 方法把它轉(zhuǎn)化成一個(gè)promise 對象作為返回,但如果timeout 函數(shù)內(nèi)部拋出錯(cuò)誤,那么就會調(diào)用Promise.reject() 返回一個(gè)promise 對象。若某函數(shù)調(diào)用一個(gè)異步函數(shù)(比如內(nèi)部含有primise),該函數(shù)應(yīng)用async修飾。

  await表示“等待”,修飾返回promise 對象的表達(dá)式。注意await 關(guān)鍵字只能放到async 函數(shù)里面。

//寫一個(gè)async 函數(shù),從而可以使用await 關(guān)鍵字, await 后面放置的就是返回promise對象的一個(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è)異步請求

  • 第一個(gè)異步請求的結(jié)果

  • 可以作為第二個(gè)異步請求內(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解從新建vue項(xiàng)目到引入組件Element的方法

    詳解從新建vue項(xiàng)目到引入組件Element的方法

    本篇文章主要介紹了詳解從新建vue項(xiàng)目到引入組件Element的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Vue.js組件實(shí)現(xiàn)選項(xiàng)卡以及切換特效

    Vue.js組件實(shí)現(xiàn)選項(xiàng)卡以及切換特效

    這篇文章主要為大家詳細(xì)介紹了Vue.js組件實(shí)現(xiàn)選項(xiàng)卡以及切換特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • vue3中的伸縮菜單組件

    vue3中的伸縮菜單組件

    這篇文章主要介紹了vue3中的伸縮菜單組件,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue項(xiàng)目實(shí)現(xiàn)對某個(gè)區(qū)域繪制水印

    vue項(xiàng)目實(shí)現(xiàn)對某個(gè)區(qū)域繪制水印

    這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目實(shí)現(xiàn)對某個(gè)區(qū)域繪制水印,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 關(guān)于vue-router的那些事兒

    關(guān)于vue-router的那些事兒

    要學(xué)習(xí)vue-router就要先知道這里的路由是什么?為什么我們不能像原來一樣直接用標(biāo)簽編寫鏈接哪?vue-router如何使用?常見路由操作有哪些?等等這些問題,就是本篇要探討的主要問題,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • vue中輪訓(xùn)器的使用

    vue中輪訓(xùn)器的使用

    今天小編就為大家分享一篇關(guān)于vue中輪訓(xùn)器的使用,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Vue3+vuedraggable實(shí)現(xiàn)動態(tài)配置頁面

    Vue3+vuedraggable實(shí)現(xiàn)動態(tài)配置頁面

    這篇文章主要為大家詳細(xì)介紹了Vue3如何利用vuedraggable實(shí)現(xiàn)動態(tài)配置頁面,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-12-12
  • vue2如何使用face-api.js實(shí)現(xiàn)人臉識別功能

    vue2如何使用face-api.js實(shí)現(xiàn)人臉識別功能

    本文介紹了如何在Vue.js項(xiàng)目中利用face-api.js實(shí)現(xiàn)人臉識別功能,首先需要安裝Vue.js和face-api.js以及其依賴TensorFlow.js,接著,下載并配置必要的模型文件到項(xiàng)目目錄,之后,將人臉識別功能封裝成Vue組件,并在組件中通過視頻流進(jìn)行人臉檢測和結(jié)果展示
    2024-09-09
  • vue實(shí)現(xiàn)ToDoList簡單實(shí)例

    vue實(shí)現(xiàn)ToDoList簡單實(shí)例

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)ToDoList簡單實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • vue實(shí)現(xiàn)flv格式視頻播放效果

    vue實(shí)現(xiàn)flv格式視頻播放效果

    這篇文章主要介紹了vue實(shí)現(xiàn)flv格式視頻播放,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評論