上篇文章《ES6新增语法(五)——Promise详解》咱们介绍Promise,Promise一旦执行就无奈暂停和勾销,所以ES6引入了Generator函数,能够通过yield关键字,把函数的执行流程挂起,能够扭转执行流程。

什么是Generator函数?

Generator次要是异步编程,用来封装异步工作,是一个异步工作的容器,能够让函数依照咱们指定的时候执行或者暂停。

应用语法:

function *name(){

...

yield; //须要暂停的时候加yield

...

yield;

...

}

const p = name();

p.next() //调用函数,执行到第一个yield处进行

p.next() //从上一个yeild开始执行,到下一个yield处为止

Generator与一般函数区别

1> 定义函数的时候比一般函数多了一个 * 号。

2> 调用的时候,一般函数名后加圆括号间接调用,而Generator并不执行,返回的也不是函数运行后果,而是指向外部的状态的指针对象,必须调用遍历器对象的next()办法,使得指针移向下一个状态。每次调用next,指针就会从上一次停下的中央开始执行到下一个yield。

3> 一般函数是无奈暂停的,但Generator函数是分段执行的,yield是暂停标记,而next()能够复原执行。

generator实例如下:

function *show(){ console.log('1') yield; console.log('2')}const p = show();p.next(); //执行第一个yield之前内容,打印1p.next(); //执行yield之后内容,打印2

yield特点
1> 能够传参数,只能传一个参数

function *chuancan(){ console.log('1') let a = yield; console.log('a',a)//12}const gen = chuancan();gen.next()gen.next(12)

2> 返回值

function *fanhui(){ console.log('1'); yield 55; console.log('2');}let fh = fanhui()let res1 = fh.next()console.log(res1) //{value: 55, done: false}let res2 = fh.next()console.log(res2) //{value: undefined, done: true}

generator函数中也能够增加 return

function *show(){ console.log('1') yield 55; console.log(2); return 89;}let gen = show();let res1 = gen.next();console.log(res1) //{value: 55, done: false}let res2 = gen.next();console.log(res2) //{value: 89, done: true}

return 办法

return 办法返回给定值,并完结遍历generator函数。

return 办法提供参数时,返回该参数,不提供时,返回undefined。

Generator函数长处

Generator函数是ES6提供的一种异步编程解决方案,解决了两大问题:

  • 回调天堂
  • 异步流控