Generator初識

一、簡介

Generator函數是ES6引入的新型函數,用於異步編程,跟Promise對象聯合使用的話會極大降低異步編程的編寫難度和閱讀難度。

與普通函數的區別:

  1. function關鍵字與函數名之間有一個星號;
  2. 函數體內部使用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());

clipboard.png

注意: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());

clipboard.png

數組方式

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());

clipboard.png

3、與for of配合使用

yield和return

function* Foo() {
    yield 1;
    yield 2;
    return 3;
}
var foo = Foo();

for(var v of foo) {
    console.log(v);
}

clipboard.png

可以看出for of不執行return值

yield*

function* Foo() {
    yield* 'hello';
}
var foo = Foo();

for(var v of foo) {
    console.log(v);
}

clipboard.png

未完待續...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章