單一的 Promise 鏈并不能發(fā)現(xiàn) async/await 的優(yōu)勢,但是,如果需要處理由多個 Promise 組成的 then 鏈的時候,優(yōu)勢就能體現(xiàn)出來了(很有意思,Promise 通過 then 鏈來解決多層回調(diào)的問題,現(xiàn)在又用 async/await 來進一步優(yōu)化它)。
假設一個業(yè)務,分多個步驟完成,每個步驟都是異步的,而且依賴于上一個步驟的結果。仍然用 setTimeout 來模擬異步操作:
現(xiàn)在用 Promise 方式來實現(xiàn)這三個步驟的處理:
輸出結果 result 是 step3() 的參數(shù) 700 + 200 = 900。doIt() 順序執(zhí)行了三個步驟,一共用了 300 + 500 + 700 = 1500 毫秒,和 console.time()/console.timeEnd() 計算的結果一致。
如果用 async/await 來實現(xiàn)呢,會是這樣:
結果和之前的 Promise 實現(xiàn)是一樣的,但是這個代碼看起來是不是清晰得多,幾乎跟同步代碼一樣