简略了解关于ES6中的Generator函数

ES6中的Generator函数

概念

  • ES6提供解决异步编程的方案之一

  • Generator函数是一个状态机,内部封装了不同状态的数据

  • 用来生成遍历器对象

  • 可暂停函数(惰性求值),yield可暂停,next方法可启动。每次返回的是yield后的表达式结果

特点

  • function 与函数名之间有个(星号)*
  • 内部用yield表达式语句来定义不同的状态
  • generator 函数返回的是指针对象(接iterator),而不会执行函数内部逻辑
  • 调用next方法,函数内部逻辑开始执行,遇到yield表达式停止,返回{value:yield后的表达式结果/undefined,done}
  • 再次调用next方法,会从上一次停止时的yield处开始,直到最后。
  • yield语句返回结果通常为undefined,当调用next方法,传参内容会作为启动时yield语句的返回值

举例


	//生成遍历器对象 function 与函数名之间有个(星号)*
	function* generatorExample()
	{
		console.log(1);
		//yield 可暂停函数
		let valStr=yield "hello";
		console.log(valStr);
		console.log(2);
		//yield 可暂停函数
		yield "word";
		console.log(3);
		//return "hello word";
	}
	//获取(指针对象)遍历器对象
	let gener=generatorExample();
	let s="";
	//next方法可启动
	console.log(s=gener.next());  	// 1 {value:"hello";done:false}
	console.log(s);				  	//   {value:"hello";done:false}
	
	//console.log(gener.next());  	//undefined  2 {value:"word";done:false}
	console.log(gener.next("给valStr传的参数"));// 给valStr传的参数  2 {value:"word";done:false}
	console.log(gener.next());  	// 3 {value:undefined;done:true}
	//如果是return   				// 3 {value:"hello word";done:true}
	

obj部署Iterator 迭代器

	let obj={name:"Lily",age:23};
	//obj部署Iterator 迭代器
	//function* objGenerator 创建一个迭代器
	obj[Symbol.iterator]=function* objGenerator(){
		yield this.name;
		yield this.age;
	}
	console.log("=====分割=====");
	//obj部署Iterator 迭代器,所以可以使用 for...of
	for (let i of obj) {
		console.log(i);   //Lily 23
	}

ajax和Generator 发送请求获取数据


	function getNew(url)
	{
		$.get(url,(data)=>{
			data=JSON.parse(data);
			console.log(data);
			getData.next(data.url);
		})
	}

	//生成一个遍历器
	function* getDataGenerator()
	{
		//yield "d";
		let url=yield getNew("http://127.0.0.1/new.php");
		yield getNew(url);
	}
	//获得一个遍历器对象
	let getData=getDataGenerator();
	getData.next();
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值