async點(diǎn):當(dāng)函數(shù)執(zhí)行時(shí)泉蝌,一旦遇到await就會(huì)先返回逊朽,等到異步操作完成,再接著執(zhí)行函數(shù)體后面的語句霹期。
async函數(shù)與generator 函數(shù)相比谆棱,不同點(diǎn):
1.內(nèi)置執(zhí)行器快压。async函數(shù)自帶執(zhí)行器;與普通函數(shù)一模一樣圆仔,只需一行即可調(diào)用。而genenrator 函數(shù)蔫劣,需要調(diào)用next方法或 co模塊坪郭,才能真正執(zhí)行。
2.更語義化脉幢。async和await, async表示函數(shù)里有異步操作歪沃,await表示緊跟在后面的表達(dá)式需要等待結(jié)果。
3.await 后面 可以是 Promise對象嫌松、任意類型的值(數(shù)值沪曙、字符串。豆瘫。)珊蟀。yield 后面只可能是Thunk函數(shù)和Promise函數(shù)。
4.async函數(shù) 返回值是Promise對象外驱,可以用then。而generator返回iterator對象腻窒。
async函數(shù)返回的Promise對象昵宇,必須等到await后面的Promise對象執(zhí)行完,才會(huì)發(fā)生狀態(tài)改變儿子,只有async函數(shù)內(nèi)部的異步操作執(zhí)行完瓦哎,才會(huì)執(zhí)行then方法指定的函數(shù)
1.只要一個(gè)await語句后的Promise變成reject,那整個(gè)async函數(shù)都會(huì)終斷執(zhí)行柔逼。所以有多個(gè)await命令蒋譬,可以統(tǒng)一放在try..catch結(jié)構(gòu)中。
2.多個(gè)await命令后面的異步操作愉适,如果不存在繼發(fā)關(guān)系犯助,最好讓其同時(shí)觸發(fā)。
注:Promise的不足點(diǎn)1. 在promise鏈中维咸,then()只能將上一步b的結(jié)果傳給下一步c剂买,而不能講上上一步a的值傳到c。