generator函式是es6提供的一種非同步程式設計解決方案。在它的內部封裝了多個狀態,因此,又可以理解為一種狀態機,執行generator函式後返回乙個迭代器物件,使用這個迭代器物件可以遍歷出generator函式內部的狀態
generator函式和傳統函式的不同點有:1 函式定義的時候,function關鍵字後面加「*」, 2 內部使用yield關鍵字定義內部狀態
function* hellogenerator()
let hg = hellogenerator();
console.log(hg.next()); //
console.log(hg.next()); //
console.log(hg.next()); //
console.log(hg.next()); //
console.log(hg.next()); //
generator函式被呼叫後,並不會立即執行完成,而是會在遇到yield關鍵字後暫停,返回的也不是函式的執行結果,而是乙個執行內部狀態的指標物件(iterator物件)
注意1: next方法內可以傳引數,這個引數的值作為上一次狀態的返回值
function* hellogenerator()
let hg = hellogenerator();
console.log(hg.next());
console.log(hg.next('nodeing'));
注意2: 可以使用for...of來遍歷generator內部狀態
function* hellogenerator()
let hg = hellogenerator();
for( let i of hg)
注意3: 物件沒有symbol.iterator屬性,我們可以手動新增,讓其具有iterator介面
let obj = {};
function* gen()
obj[symbol.iterator] = gen;
for(let a of obj)
1.限制**次數
**
2.非同步讀取檔案
const fs = require('fs');
function readfile(path) else
})})
}function* asyncfile()
let gen = asyncfile();
gen.next().value.then((data)=>).then((data2)=>).then((data3)=>);
如果覺得上面的寫法還比較麻煩的話,我們可以引入乙個co模組,讓aysncfile裡面的**自動執行
const co = require('co');
function* asyncfile()
co(asyncfile()).then(()=>);
es6 最佳入門實踐 6
symbol是es6中一種新增加的資料型別,它表示獨一無二的值。es5中我們把資料型別分為基本資料型別 字串 數字 布林 undefined null 和引用資料型別 object 在es6中新增的symbol資料型別劃分到基本資料型別 為什麼會有這樣一種資料型別呢?別人給了你乙個定義好的物件 va...
es6 最佳入門實踐 12
在es5中,物件導向我們通常寫成這樣 function person name,age person.prototype.showname function let p new person xiaoqiang 10 p.showname 上面這種寫法與傳統的物件導向寫法有很大的不同,讓學習過其他物...
es6 最佳入門實踐 8
要理解非同步,首先,從同步 開始說 alert 1 alert 2 像上面的 執行順序是從上到下,先後彈出1和2,這種 叫做同步 alert 0 settimeout function 2000 settimeout function 1000 alert 3 上面 的彈出順序是 0 3 2 1 像...