es6 最佳入門實踐 10

2022-08-19 19:03:15 字數 1555 閱讀 2642

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 像...