一、簡介
Generator函數是ES6引入的新型函數,用於異步編程,跟Promise對象聯合使用的話會極大降低異步編程的編寫難度和閱讀難度。
與普通函數的區別:
- function關鍵字與函數名之間有一個星號;
- 函數體內部使用yield語句,定義不同的內部狀態(yield在英語裏的意思就是“產出”)。
二、簡單示例
1、yield和return
function* Foo() {
yield 'hello';
yield 'world';
return '!';
}
var foo = Foo();
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
注意:generator函數不能直接使用,是通過next()方法獲取yield/return的返回結果,而return可以提前終止函數。
2、yield*
字符串方式
function* Foo() {
yield* 'hello';
}
var foo = Foo();
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
數組方式
function* Foo() {
yield* ['a', 'b', 'c'];
}
var foo = Foo();
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
3、與for of配合使用
yield和return
function* Foo() {
yield 1;
yield 2;
return 3;
}
var foo = Foo();
for(var v of foo) {
console.log(v);
}
可以看出for of不執行return值
yield*
function* Foo() {
yield* 'hello';
}
var foo = Foo();
for(var v of foo) {
console.log(v);
}
未完待續...