Generator
Generator 函数是 ES6 提供的一种异步编程解决方案, 语法行为和传统普通函数完全不同, Generator 函数是一个状态机, 封装了多个内部状态, 执行函数会返回一个迭代器对象, 返回的迭代器对象可以依次遍历 Generator 函数内部的每一个状态.
- function 关键字和函数名之间有一个星号, 星号写在哪个位置都可以
- 函数体内部使用 yield 表达式定义不同的状态
1 | function* helloWorld() { |
调用 Generator 函数, 返回一个迭代器对象, 代表 Generator 函数的内部指针, 每次调用迭代器对象的 next 方法, 就会返回一个包含 value 和 done 属性的对象, value 属性表示当前的内部状态(yield 表达式)的值, done 属性表示遍历是否结束的 boolean 值
yield 表达式
yield 表达式只能用在 Generator 函数里面, 用在其他地方都会报错
- 遇到 yield 表达式, 就暂停执行后面的操作, 并将 yield 后面紧跟的表达式的值作为返回对象的 value 属性值
- 下一次调用 next 方法时, 再继续往下执行, 直到遇到下一个 yield 表达式
- 如果没有再遇到新的 yield 表达式, 就一直运行到函数结束, 直到 return 语句为止, 并将 return 语句后面的表达式的值作为返回的对象的 value 属性值
- 如果该函数没有 return 语句, 则返回的对象的 value 属性值为 undefined