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

vue使用async/await來實(shí)現(xiàn)同步和異步的案例分享

 更新時(shí)間:2024年01月14日 10:14:48   作者:aaron9185  
近期項(xiàng)目中大量使用async,從服務(wù)器獲取數(shù)據(jù),解決一些并發(fā)傳參問題,代碼很簡單,在此也看了一些博客,現(xiàn)在async/await已經(jīng)大范圍讓使用,所以本文給大家介紹一下vue使用async/await來實(shí)現(xiàn)同步和異步的案例,需要的朋友可以參考下

用async/await 來處理異步

近期項(xiàng)目中大量使用async,從服務(wù)器獲取數(shù)據(jù),解決一些并發(fā)傳參問題。代碼很簡單。在此也看了一些博客,現(xiàn)在async/await已經(jīng)大范圍讓使用,是時(shí)候總結(jié)一波啦。
先說一下async的語法,它作為一個(gè)關(guān)鍵字放在函數(shù)前面,用于表示函數(shù)是一個(gè)異步函數(shù),因?yàn)閍sync就是異步的異步,異步函數(shù)也就是意味著這個(gè)函數(shù)的執(zhí)行不會(huì)阻塞后面代碼的執(zhí)行。簡單的寫一個(gè)async函數(shù)

async function hello(){
    return 'hello world';
}

語法很簡單,就是在函數(shù)前面加上async,他就成異步函數(shù)啦。怎么去調(diào)用呢,其實(shí)一樣,平時(shí)怎么使用函數(shù)我們就怎么去調(diào)用它,直接加括號就可以啦,為了表示它沒有阻塞后面的代碼我們寫個(gè)案例

async function hello(){
  return 'hello world';
}
console.log(hello());
console.log('我是先執(zhí)行的');

好像沒有什么用,別急,首先我們看到hello()返回的是一個(gè)promise對象,其次它好像沒有去異步執(zhí)行。
async異步函數(shù)返回的是一個(gè)promise對象,如果要獲取到promise返回值,我們就應(yīng)該使用.then方法。

async function hello(){
  return 'hello world';
}
hello().then(result=>{
  console.log(result);
})
console.log('我是先執(zhí)行的');

然后就沒問題啦,一個(gè)簡單的異步函數(shù)就OK啦,hello執(zhí)行的時(shí)候沒有阻塞后面代碼的執(zhí)行,和我們之前說的一樣。
你可能注意到控制臺中的promise有一個(gè)resolved,這是async函數(shù)內(nèi)部的實(shí)現(xiàn)原理,如果async函數(shù)中返回一個(gè)值,當(dāng)調(diào)用該函數(shù)時(shí),內(nèi)部會(huì)調(diào)用promise.solve()方法把它轉(zhuǎn)化成一個(gè)promise()對象作為返回,但如果hello函數(shù)內(nèi)部發(fā)生錯(cuò)誤呢?那么就會(huì)調(diào)用promise.reject()返回一個(gè)promise對象,這時(shí)修改一下hello()函數(shù)

async function hello(flag){
   if(flag){
      return 'hello world';
   }else{
       throw 'happen Error';
   }
}
console.log(hello(0));
console.log(hello(1));

如果函數(shù)內(nèi)部發(fā)生錯(cuò)誤,promise對象有一個(gè)catch方法進(jìn)行捕獲。

hello(0).catch(err=>{
  console.log(err);
})

async是差不多啦,我們再來熟悉一下await關(guān)鍵字,await是等待的意思,那么它在等待什么呢,它后面跟著什么呢?其實(shí)它后面可以放任何表達(dá)式,不過我們更多放的是一個(gè)promise對象的表達(dá)式。注意await關(guān)鍵字,只能放在async函數(shù)里面!??!

function awaitMethod(num){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      resolve(2*num);
    },2000)
  })
}

我們再寫一個(gè)async函數(shù),從而可以使用await關(guān)鍵字,await后面放置的是返回promise對象的一個(gè)表達(dá)式,所以它后面可以寫上awaitMethod函數(shù)的調(diào)用。

async function test (){
  let result = await awaitMethod(30);
  console.log(result);
}

然后我們調(diào)用這個(gè)函數(shù)

test();

2秒鐘之后控制臺輸出60。
現(xiàn)在我們看看代碼的執(zhí)行過程,調(diào)用test函數(shù)時(shí),它遇到了里面的await關(guān)鍵字,await代表等待,代碼到這里會(huì)暫停,它在等什么呢,等待后面的promise對象執(zhí)行完成,然后拿到promise的返回值,拿到返回值之后它繼續(xù)往下執(zhí)行,直到console.log()執(zhí)行。
就這一個(gè)函數(shù),或許我們看不出來asycn和await的作用,如果我們要計(jì)算3個(gè)數(shù)的值,然后把他們的值加起來輸出,或許就看的明顯啦。

async function test(){
    let result = await awaitMethod(30);
    let result1 = await awaitMethod(50);
    let result2 = await awaitMethod(30);
    console.log(result+result1+result2 );
}

6秒之后控制臺,輸出220,我們可以看到,寫異步代碼的就像寫同步代碼一樣啦,再也沒有什么回調(diào)地獄這一說啦。

以上就是vue使用async/await來實(shí)現(xiàn)同步和異步的案例分享的詳細(xì)內(nèi)容,更多關(guān)于vue async/await來實(shí)現(xiàn)同步異步的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue動(dòng)態(tài)注冊組件實(shí)例代碼詳解

    vue動(dòng)態(tài)注冊組件實(shí)例代碼詳解

    寫本篇文章之前其實(shí)也關(guān)注過vue中的一個(gè)關(guān)于加載動(dòng)態(tài)組件is的API,最開始研究它只是用來實(shí)現(xiàn)一個(gè)tab切換的功能,需要的朋友可以參考下
    2019-05-05
  • Vue遞歸實(shí)現(xiàn)樹形菜單方法實(shí)例

    Vue遞歸實(shí)現(xiàn)樹形菜單方法實(shí)例

    學(xué)習(xí)vue有一段時(shí)間了,最近使用vue做了一套后臺管理系統(tǒng),其中使用最多就是遞歸組件,下面這篇文章主要給大家介紹了關(guān)于Vue利用遞歸實(shí)現(xiàn)樹形菜單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-11-11
  • Jenkins自動(dòng)化部署Vue項(xiàng)目的方法實(shí)現(xiàn)

    Jenkins自動(dòng)化部署Vue項(xiàng)目的方法實(shí)現(xiàn)

    本文主要介紹了Jenkins自動(dòng)化部署Vue項(xiàng)目的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue3.0中使用Element-Plus中Select下的filter-method屬性代碼示例

    vue3.0中使用Element-Plus中Select下的filter-method屬性代碼示例

    這篇文章主要給大家介紹了關(guān)于vue3.0中使用Element-Plus中Select下的filter-method屬性的相關(guān)資料,Filter-method用法是指從一組數(shù)據(jù)中選擇滿足條件的項(xiàng),文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Vue?3?中?vue-router?的?router.resolve?()?API詳解

    Vue?3?中?vue-router?的?router.resolve?()?API詳解

    router.resolve()?就好比是一個(gè)精準(zhǔn)的?“導(dǎo)航參謀”,當(dāng)我們在?Vue?3?應(yīng)用里需要明確某個(gè)路由地址對應(yīng)的詳細(xì)信息時(shí),它就能派上用場,本文給大家介紹Vue?3?中?vue-router?的?router.resolve?()?API,感興趣的朋友一起看看吧
    2025-04-04
  • Vue3實(shí)現(xiàn)clipboard復(fù)制的使用示例

    Vue3實(shí)現(xiàn)clipboard復(fù)制的使用示例

    在日常開發(fā)中,為用戶提供復(fù)制文本功能的需求比較常見,下面介紹一款vue3可用的插件,可以快速實(shí)現(xiàn)這個(gè)功能,感興趣的可以了解一下
    2023-11-11
  • vue引入swiper插件的使用實(shí)例

    vue引入swiper插件的使用實(shí)例

    本篇文章主要介紹了vue引入swiper插件的使用實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Vue的列表之渲染,排序,過濾詳解

    Vue的列表之渲染,排序,過濾詳解

    這篇文章主要為大家詳細(xì)介紹了Vue的列表之渲染,排序,過濾,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • element?table?數(shù)據(jù)量大頁面卡頓的解決

    element?table?數(shù)據(jù)量大頁面卡頓的解決

    這篇文章主要介紹了element?table?數(shù)據(jù)量大頁面卡頓的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • vue中el-table格式化el-table-column內(nèi)容的三種方法

    vue中el-table格式化el-table-column內(nèi)容的三種方法

    本文主要介紹了vue中el-table格式化el-table-column內(nèi)容的三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論