1. 程式人生 > >promise generator async/await的優劣對比

promise generator async/await的優劣對比

promise generator async/await的優劣對比

Promise的寫法只是回撥函式的改進,使用then方法,只是讓非同步任務的兩段執行更清楚而已。Promise的最大問題是程式碼冗餘,請求任務多時,一堆的then,也使得原來的語義變得很不清楚

Generator 函式是一個普通函式,但是有兩個特徵。
一是,function關鍵字與函式名之間有一個星號;
二是,函式體內部使用yield表示式,定義不同的內部狀態(yield在英語裡的意思就是“產出”)。
Generator 函式的呼叫方法與普通函式一樣,也是在函式名後面加上一對圓括號。不同的是,呼叫 Generator 函式後,該函式並不執行,返回的也不是函式執行結果,而是一個指向內部狀態的指標物件,必須呼叫遍歷器物件的next方法,使得指標移向下一個狀態。也就是說,每次呼叫next方法,內部指標就從函式頭部或上一次停下來的地方開始執行,直到遇到下一個yield表示式(或return語句)為止。換言之,Generator 函式是分段執行的,yield表示式是暫停執行的標記,而next方法可以恢復執行。雖然Generator將非同步操作表示得很簡潔,但是流程管理卻不方便(即何時執行第一階段、何時執行第二階段)

ES8引入了**async函式,自動執行Generator函式的方法。**使得非同步操作變得更加方便。簡單說來,它就是Generator函式的語法糖。我們的主角來了:async/await。