似乎大部分JS的文章都會(huì)拿callback hell來(lái)做開(kāi)場(chǎng)白
那我也拿了∮髟↑
從ES6出來(lái)就聽(tīng)說(shuō)有一種來(lái)自黑魔法:“用同步的寫(xiě)法處理異步問(wèn)題”耻陕;
直到接觸egg.js,我才開(kāi)始研究他的實(shí)現(xiàn)方式彪标。經(jīng)過(guò)2個(gè)鐘頭的試錯(cuò),終于得出了一個(gè)簡(jiǎn)陋的結(jié)果掷豺。
貼上代碼
1捞烟、首先把所有需要異步處理的內(nèi)容封裝成Promise。
2当船、主函數(shù)是一個(gè)Generator函數(shù)题画。
3、執(zhí)行主函數(shù)不是單純調(diào)用主函數(shù)德频,而是判斷yield回來(lái)的是不是Promise對(duì)象苍息。
4、如果是Promise對(duì)象壹置,那么then一下竞思,把resolve的數(shù)據(jù)傳入下個(gè)next中。
5钞护、這時(shí)候如圖中盖喷,主邏輯中的"var result = " ,就被賦值了Promise的resolve結(jié)果了难咕。
這樣寫(xiě)的好處是讓主邏輯本該的異步代碼變成同步代碼寫(xiě)法课梳,用ES6 Generator的特性距辆,把主邏輯的函數(shù)執(zhí)行權(quán)交給了Promise對(duì)象。