做爲前端開發者的夥伴們,確定對Promise,Generator,async/await很是熟悉不過了。Promise絕對是爛記於心,而async/await卻讓使大夥們感受到爽(原來異步能夠這麼簡單)。可回頭來梳理他們的關聯時,你驚訝的發現,他們是如此的密切相關。javascript
我對他們三者之間的關聯理解如上圖所示,Promise是基礎,Generator和async/await串連多個Promise的同步執行,也就是把Promise的異步特性變爲同步,編程更爽。固然Generator的yield也能夠跟非Promise類型的對象,對於Generator更能夠理解爲迭代器。而async/await則是多個Promise同步執行的簡單方法。html
但咱們不難發如今處理Promise的時候generator和asnyc/await的返回結果也會一個Promise,你能夠按照一個標準的Promise進行處理。前端
本人最早接觸Promise是Jquery的Deferred對象,而後就出現了bluebird這類實現Promise A+規範的庫,在後來就是ES6對他的原生實現,以及對Generator的加入,再後來async/await又出現了。java
從看到上述代碼,對多個異步請求的處理方案從promise->generator->async/await的變遷,代碼量愈來愈少,理解起來也更爲簡單。固然輸出結果以下:編程
1. Four:延遲一秒輸出c#
2. FiveSix:延遲兩秒輸出,說明await真實同步執行的promise
1. 本文章只是本人對Promise,generator,async/await的簡單理解,但願對部分小夥伴全部幫助。異步
2. 固然async/await不是javascript的特點,在其餘語言中也是有實現的,如:java, c#。有興趣的朋友能夠查看《async和await之異步編程學習》文章,對c#與javascript的對比。async