JS異步實現Generator

一、Symbol數據類型

      ES6中新增加了Symbol數據類型。

      原生具有[Symbol.iterator]屬性的數據類型:數組、類數組、map、set、

      具有[Symbol.iterator]屬性的對象,直接調用就可以生成一個Iterator對象

 

二、Iterator對象:是一個指針對象,遍歷器對象

        方法:next():返回的格式爲{value:    ,done:      }

                 使用for..of遍歷: 每次遍歷得到的是value值。

                  

三、Geneteror

      function*  G(){

             yield    200;

             yield    300;

            return  400;

       }

    var g=G();

      1.Generator不是一個函數,定義generator時,使用function*,使用yield來返回結果。

      2.調用Generator之後,它內部的代碼不會立即執行,而是處於一個暫停的狀態。並生成一個generator對象。

      3.遇到yield時,會執行yeild後面的表達式,並返回執行之後的值,然後再次進入暫停狀態,此時done: false

 

    Generator返回的也是一個iterator對象,因此可以使用next方法、for..of

    1.使用next方法時,next中的參數會傳遞給已經執行的yield前面的值。

     2.yield*可以在一個Generator中引用另外一個Generator。


四、generator實現異步操作

      1.需要thunk函數,只有一個參數,即回調函數

      2.通常使用co庫,對異步操作進行包裝,方便簡潔。

      3.yield後面必須是thunk函數。

      4.generator依然依靠callback


 五、async-await:是Generator的語法糖

      與Generator相比:

          1.將function*  替代爲 async function

          2.將yield替代爲await

          3. await後面是promise對象。跟其他類型的數據也OK,但是會直接同步執行,而不是異步。

   









          

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章