ES6 - Generator

Generator函数是ES6引入的新型函数,用于异步编程,是Promise的更高级用法,跟Promise对象联合使用的话会极大降低异步编程的编写难度和阅读难度。

Generator 函数,它与我们常见的函数有很多共同点,但还可以看到下面几个差异
1、通常的函数以 function 开始,但 Generator 函数以function* 开始。

2、在 Generator 函数内部,yield 是一个关键字,和 return 有点像。不同点在于,所有函数(包括 Generator 函数)都只能返回一次,而在 Generator 函数中可以 yield 任意次yield 表达式暂停了 Generator 函数的执行,然后可以从暂停的地方恢复执行

3、yield和yield* 只能在Generator 函数内部使用,一般的函数内使用会报错。

4、在Generator函数调用另一个Generator函数时候,要用yield*
等价于,在yield*位置,展开另一个Generator函数的状态。

常见的函数不能暂停执行,而 Generator 函数可以,这就是这两者最大的区别。

基本使用方式:
在这里插入图片描述
调用Generator函数,函数并不执行,而是返回一个遍历器对象。必须调用遍历器对象的next方法,将函数执行到下一个yield语句的地方。
当遇到yield语句,就暂停执行,并将yield后边的表达式的值,作为返回对象的value属性值。
yield语句如果用在一个表达式之中,必须放在圆括号里面;
yield语句用作函数参数或放在赋值表达式的右边,可以不加括号;
return语句,将返回表达式后边的值,并结束函数。

(Generator 函数也是返回Iterator接口,所以可以使用next()函数访问)

————————————————————————————————————
注意:如果在编译 Generator 函数的时候,如果控制台报regeneratorRuntime is not defined 错误,那么就是babel 并不是完全支持编译es6。
那么就需要babel的拓展包(Polyfill)。
这是一个补完babel支持es6的拓展包,配置步骤为3个:
1.打开命令行键入 npm install --save-dev babel-polyfill 安装polyfill
2.在webpack.config.js中最上面写上var babelpolyfill = require("babel-polyfill");
3.在自己的项目js文件中最开头写上import "babel-polyfill";