ES6难点-Generator函数和async函数

一.Generator函数

1.定义

Generator函数是ES6提供的一种异步编程解决方案 , 语法上可以Generator函数理解为一个状态机,封装了多个内部状态

2.语法

a. function关键字和函数名之间有个*
b.函数体内部使用yield表达式,定义不同的内部状态

在这里插入图片描述
yield只能在Generator函数中使用, 默认情况下,yiled的返回值是undefined

3.调用

let a = hello() 此处a为一个迭代器
a.next( ) 每次调用next方法,可以依次获取每个yield的值

例:遍历迭代器的方法

    <script type="text/javascript">
    		function* foo(){
            	yield 'one';
            	yield 'two';
            	yield 'three';
            	return 'end';
    		}
     
    		var result = foo()
     
    		// 通过while遍历
    		let item
    		// result.next()返回值为一个对象,即{value:'xxx',done:false/true}
    		// 若done的值为false说明还有yield未执行,若为true则表明已执行完
    		while(!(item = result.next()).done){
    			console.log(item.value)
    		}
     
     
    		// 通过for of方法
    		for(let i of result){
    			console.log(r)
    		}
     
     
    	</script>

4.请求案例

function* foo(){
	        let c_url='接口地址'
	        // 因为yield执行后返回值为undefined,所以此处需要使用call来拿到请求方法返回值
	        let a = yield call(执行函数,c_url)
 
		}
        /*
					异步函数的执行器{
						1)在上一个请求结束后再去调用下一个请求;
						2)将当前请求结果左右yield表达式的返回值返回
					}
				*/
 
		function call(handler,params){
			handler(params).then((response)=>{
				iterator.next(response)
			})
		}
 
		let iterator = foo()

二. async函数

1.定义

async函数是generator函数的语法糖,在generator函数的基础上添加了一些更加方便用户操作的新特性

2.使用

<script type="text/javascript">
		async function foo(){
			// handler为请求方法
			let a = await handler('接口地址')
			return a
		}
 
		// async函数的调用与普通函数一致
		let f = foo() //promise
		f.then((result)=>{
			console.log(result)   //result为foo方法的返回值
		})
	
	</script>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值