首頁  >  文章  >  web前端  >  JS異步實作Generator的方法

JS異步實作Generator的方法

一个新手
一个新手原創
2017-10-11 09:57:461648瀏覽

一、Symbol資料型別

      ES6中新增了Symbol資料型別。

      原生具有[Symbol.iterator]屬性的資料型態:陣列、類別陣列、map、set、

      具有[Symbol.iterator]屬性的對象,直接呼叫就可以產生一個Iterator物件

二、Iterator物件:是指針對象,遍歷器物件

        方法:next():傳回的格式為{value:     

                 以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,但是會直接同步執行,而不是非同步。  

以上是JS異步實作Generator的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn