ES6-----Generator

Generator函数是ES6提供的一种异步编程解决方法,

Generator函数的理解:

语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。

形式上,Generator 函数是一个普通函数,但是有两个特征:

    1.function 和函数名之间必须有 *

    2.函数体内部使用yield表达式,定义不同的内部状态。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<body>
	<!-- Generator函数返回一个迭代器对象
		next()方法 会执行yiled状态 
		一个yield就是一个状态 一个yield就是代码节点 
	-->
	<script>
		function* Generator(){
			// 内部使用yield表示式 
			yield '我是状态1';//返回值 对这个状态的描述
			yield '我是状态2';
			yield '我是状态3';
		}
		let res=Generator();//返回值 返回的是一个迭代器对象/generator对象
		console.log(res.next()); //执行第一个状态
		console.log(res.next()); //执行下一个状态
		console.log(res.next()); //执行下一个状态
		console.log(res.next()); 

	</script>

</body>
</html>

 

Generator的异步应用

模拟发起异步请求 拿到第一个状态的返回结果再执行第二个状态,状态之间数据传递通过next

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
	<!-- Generator函数返回一个迭代器对象
		next()方法 会执行yiled状态 
		一个yield就是一个状态 一个yield就是代码节点 
	-->
	<script>
 // Generator函数 异步编程解决方案  异步代码 同步编写
		function* Generator(){
			let res=yield getData();
			console.log(res,'获取响应');
			yield '结束了';
		}
		let res=Generator();//返回值 返回的是一个迭代器对象/generator对象
		res.next();
		async function getData(){
			// 发起一个异步请求
			let result= await axios.get('http://xx.xxx.xxx.xx:xxx/index/article/findCategoryArticles');
			// 应该在第一个状态的异步请求中发起第二段程序/第二个状态的执行 
			// 上一个状态返回值作为下一个状态的入口
			// 第一个状态1方法里面发起第二个状态的执行 
			res.next(result);
		}

		
	</script>

</body>
</html>

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值