一、介绍
Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同
回顾下上文提到的解决异步的手段:
- 回调函数
- promise
那么,上文我们提到 promsie 已经是一种比较流行的解决异步方案,那么为什么还出现 Generator?甚至 async/await 呢?
该问题我们留在后面再进行分析,下面先认识下 Generator
Generator函数
执行 Generator 函数会返回一个遍历器对象,可以依次遍历 Generator 函数内部的每一个状态
形式上,Generator 函数是一个普通函数,但是有两个特征:
- function 关键字与函数名之间有一个星号
- 函数体内部使用 yield 表达式,定义不同的内部状态
二、使用function* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending'; }
Generator 函数会返回一个遍历器对象,即具有 Symbol.iterator 属性,并且返回给自己
```js
function* gen(){
// some code
}
var g = gen();
gSymbol.iterator === g
// true
通过 yield 关键字可以暂停 generator 函数返回的遍历器对象的状态
```js
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
上述存在三个状态:hello、world、return