Promise, Generator, async/await的漸進理解

     做爲前端開發者的夥伴們,確定對Promise,Generator,async/await很是熟悉不過了。Promise絕對是爛記於心,而async/await卻讓使大夥們感受到爽(原來異步能夠這麼簡單)。可回頭來梳理他們的關聯時,你驚訝的發現,他們是如此的密切相關。javascript

1、三者關係與發展史

      我對他們三者之間的關聯理解如上圖所示,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

2、實例代碼對比

從看到上述代碼,對多個異步請求的處理方案從promise->generator->async/await的變遷,代碼量愈來愈少,理解起來也更爲簡單。固然輸出結果以下:編程

1. Four:延遲一秒輸出c#

2. FiveSix:延遲兩秒輸出,說明await真實同步執行的promise

3、其餘

1. 本文章只是本人對Promise,generator,async/await的簡單理解,但願對部分小夥伴全部幫助。異步

2. 固然async/await不是javascript的特點,在其餘語言中也是有實現的,如:java, c#。有興趣的朋友能夠查看《async和await之異步編程學習》文章,對c#與javascript的對比。async

相關文章
相關標籤/搜索