后端框架koa2中采用了async函數(shù)取代了前一代中的Generator函數(shù),所以有必要對async函數(shù)進(jìn)行進(jìn)一步的理解。
首先應(yīng)該明白async函數(shù)其實(shí)只是Generator函數(shù)的一個(gè)語法糖而已,對于Generator函數(shù)而言,他無法自執(zhí)行,而需要自己來書寫或?qū)雸?zhí)行器來幫助執(zhí)行,而對于async函數(shù)來說,只需要想普通的同步函數(shù)一樣調(diào)用即可,只是在書寫函數(shù)時(shí)需要在開頭加入async,而在內(nèi)部需要進(jìn)行異步操作的地方加上await。
注意:await后面要等待的是什么?
答:一個(gè)Promise對象
我們來看下面這個(gè)例子:

await后面不是Promise對象時(shí)
我們可以很清楚的發(fā)現(xiàn),當(dāng)await后面不是一個(gè)Promise對象時(shí),那么他將不被await等待,若是一個(gè)異步操作,就會(huì)被加入異步隊(duì)列。

執(zhí)行結(jié)果

await后面是Promise對象時(shí)

執(zhí)行結(jié)果

Promise對象內(nèi)部狀態(tài)不發(fā)生改變時(shí)