一、简介
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);
}
未完待续 …