2023-05-21

async:

1. async 是異步的意思,await則可以理解為 async wait揍很。所以可以理解async就是用來(lái)聲明一個(gè)異步方法,而 await是用來(lái)等待異步方法執(zhí)行

async作為一個(gè)關(guān)鍵字放在函數(shù)前面万伤,表示該函數(shù)是一個(gè)異步函數(shù)窒悔,異步函數(shù)意味著該函數(shù)的執(zhí)行不會(huì)阻塞后面代碼的執(zhí)行;而 await 用于等待一個(gè)異步方法執(zhí)行完成壕翩;

async/await的作用就是使異步操作以同步的方式去執(zhí)行

async的用法蛉迹,在函數(shù)前面加上async關(guān)鍵字,表示函數(shù)是異步的放妈。

async function timeout() {

? ? return 'hello world!'

}

作用:async 函數(shù)返回的是一個(gè)promise 對(duì)象北救。即返回值將會(huì)被promise包裹,如果async函數(shù)中有返回值芜抒,當(dāng)調(diào)用該函數(shù)時(shí)珍策,內(nèi)部會(huì)調(diào)用Promise.resolve()方法把它轉(zhuǎn)化成一個(gè)promise對(duì)象作為返回

那么要想獲取到async 函數(shù)的執(zhí)行結(jié)果,就要調(diào)用promise的then 或 catch 來(lái)給它注冊(cè)回調(diào)函數(shù)

? async function timeout() {

? ?? return 'hello world!'

?? }

?? timeout().then(val => {

? ?? console.log(val)

?? })

?? console.log('我雖然在后面宅倒,但是先執(zhí)行')

1攘宙、async函數(shù)的執(zhí)行:會(huì)返回promise對(duì)象,并且把內(nèi)部的值進(jìn)行promise的封裝拐迁。如果promise對(duì)象通過(guò)then或catch方法又注冊(cè)了回調(diào)函數(shù)蹭劈,async函數(shù)執(zhí)行完以后,注冊(cè)的回調(diào)函數(shù)就會(huì)放到異步隊(duì)列中线召,等待執(zhí)行铺韧。

如果只是async,和promise差不多缓淹,但有了await就不一樣了哈打,await關(guān)鍵字只能放到async函數(shù)里面,2讯壶、await在等待什么呢料仗?

其實(shí)await不僅僅用于等Promise對(duì)象,還可以等任意表達(dá)式伏蚊,所以await后面實(shí)際是可以接普通函數(shù)調(diào)用或者直接量的立轧,**不過(guò)我們更多的是放一個(gè)返回promise 對(duì)象的表達(dá)式。他等待的是promise對(duì)象執(zhí)行完畢,并返回結(jié)果氛改。**

3匀借、await的作用:阻塞后邊的代碼

不管await后面跟著的是什么,await都會(huì)阻塞后面的代碼平窘。阻塞的是該函數(shù)內(nèi)部的代碼,而非整段代碼凳怨。

async function fn1 (){

? console.log(1)

? await fn2() // fn2進(jìn)入微任務(wù)隊(duì)列等待執(zhí)行

? console.log(2) // 阻塞

}

async function fn2 (){

? console.log('fn2')

}

fn1()

console.log(3)

// 輸出結(jié)果:1瑰艘,fn2,3肤舞,2

總結(jié):

async 函數(shù)1)函數(shù)的返回值為Promise對(duì)象2)Promise對(duì)象的結(jié)果由async函數(shù)執(zhí)行的返回值決定

await 表達(dá)式1)正常情況下紫新,await右側(cè)的表達(dá)式一般為 promise對(duì)象 , 但也可以是其它的值2)如果表達(dá)式是promise對(duì)象,await就忙起來(lái)了李剖,它會(huì)阻塞函數(shù)后面的代碼芒率,**等著Promise對(duì)象resolve,然后得到resolve的值篙顺,**作為await表達(dá)式的運(yùn)算結(jié)果偶芍。3)如果表達(dá)式是其它值, 直接將此值作為await的返回值

**async**和**await**基于promise的。使用async的函數(shù)將會(huì)始終返回一個(gè) promise 對(duì)象德玫。這一點(diǎn)很重要匪蟀,要記住,可能是你遇到容易犯錯(cuò)的地方宰僧。

在使用\**await\**的時(shí)候我們只是暫停了函數(shù)材彪,而非整段代碼。這里經(jīng)常會(huì)是容易犯錯(cuò)的地方琴儿。

async和await是**非阻塞的**

仍然可以使用 **Promise**段化,例如**Promise.all(p1, p2, p3)**.,接受一個(gè)數(shù)組作為參數(shù)造成,p1显熏、p2、p3 都是 Promise 實(shí)例谜疤,如果不是佃延,就會(huì)先調(diào)用 Promise .resolve方法,將參數(shù)轉(zhuǎn)為 Promise 實(shí)例夷磕,再進(jìn)一步處理履肃。只要 p1、p2坐桩、p3 之中有一個(gè)被 rejected尺棋,整個(gè)狀態(tài)就變成 rejected。

注意1)await必須寫(xiě)在async函數(shù)中, 但async函數(shù)中可以沒(méi)有await2)如果await的promise失敗了, 就會(huì)拋出異常, 需要通過(guò)**try…catch**來(lái)捕獲處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膘螟,隨后出現(xiàn)的幾起案子成福,更是在濱河造成了極大的恐慌,老刑警劉巖荆残,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奴艾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡内斯,警方通過(guò)查閱死者的電腦和手機(jī)蕴潦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俘闯,“玉大人潭苞,你說(shuō)我怎么就攤上這事≌胬剩” “怎么了此疹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)遮婶。 經(jīng)常有香客問(wèn)我蝗碎,道長(zhǎng),這世上最難降的妖魔是什么旗扑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任衍菱,我火速辦了婚禮,結(jié)果婚禮上肩豁,老公的妹妹穿的比我還像新娘脊串。我一直安慰自己,他們只是感情好清钥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布琼锋。 她就那樣靜靜地躺著,像睡著了一般祟昭。 火紅的嫁衣襯著肌膚如雪缕坎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天篡悟,我揣著相機(jī)與錄音谜叹,去河邊找鬼。 笑死搬葬,一個(gè)胖子當(dāng)著我的面吹牛荷腊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播急凰,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼女仰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疾忍,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤乔外,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后一罩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體杨幼,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年聂渊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了推汽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歧沪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莲组,到底是詐尸還是另有隱情诊胞,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布锹杈,位于F島的核電站撵孤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏竭望。R本人自食惡果不足惜邪码,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咬清。 院中可真熱鬧闭专,春花似錦、人聲如沸旧烧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掘剪。三九已至平委,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夺谁,已是汗流浹背廉赔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匾鸥,地道東北人甜孤。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像团搞,于是被迫代替她去往敵國(guó)和親蚕钦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容