ES6之Generator生成器

什么是Generator生成器?

生成器是通过构造函数Generator创建出的对象,生成器既是一个迭代器,又是一个可迭代的对象。

  • ES6新增可解决异步编程的方案
  • 可允许一个函数返回的可遍历对象生成多个值

Generator函数

只需要把函数变成Generator函数
生成器函数:生成器是通过function* 关键字定义,*号的位置没有严格规定,只要在中间就行
注意:async* 不能同时加

function *test(){
	let info = yield 1;
		console.log(info)
		info = yield 2 + info;
		console.log(info)
	}
const generator = test();

注意点:
1.生成器有返回值,出现在最后一次的done为true的value中
2.调用生成的next方法时,可以传递参数,传递的参数会交给yield表达式的返回值
3.第一次去调用函数的时候,传递的参数是没有任何含义的

return方法

return()调用以后,可以提前结束生成器函数,整个的迭代过程也会提前结束
还可以调用 throw()

function* fun(){ 
	yield 1; 
	yield 2; 
	yield 3;
}
const generator = fun();
console.log(generator.next().value); //1
console.log(generator.return(9).value); //9 return() 调用之后,提前结束了
console.log(generator.next().done);//true

关键字yield的使用

yield关键字是用来暂停和恢复一个遍历器函数的运行的------来自MDN的解释翻译

  • 在运行.next(),遇到了一个yield命令,就会暂停
function* fun() {
	let i = 1;
	while(true){
		yield i++;
	}
}
let obj= fun();
obj.next(); //{value: 1, done: false}  
obj.next(); //{value: 2, done: false}
obj.next();	//{value: 3, done: false}
obj.next();	//{value: 4, done: false}

上面例子中,定义了一个fun的生成器函数,调用之后返回了一个迭代器对象(obj),
然后在调用next方法后,函数内执行第一条yield语句时,输出状态为done,以及相应值。
yield的每一次执行,返回的值变为迭代器的下一个值,执行一次yield语句就在该处暂停,所用的yield语句执行完,
return完之后,就退出了生成器函数,后面若还有yield操作就不会再执行。

  • 注意点:yield只能在Generator函数的内部使用,表示产生一个迭代数据,在一般的函数内使用会报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值