一、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中文網其他相關文章!