ES6——生成器解决回调地狱

 生成器一般用于解决回调地狱

生成器写法:function *(){} 

  1. 函数名前面有一个*
  2. 调用next()方法开始执行函数
  3. yield为暂停

yield 它有两个属性,value和done,分别代表返回值和是否完成。

使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的return关键字

例:

function * gen(){
				console.log('My name is NanChen');
			}
			let iterator = gen()
			iterator.next()    //开始执行

打印效果:

 例2:

<script>
        function * gen() {
            console.log('--- 1 ---');
            yield 'eye'        // 使生成器函数执行暂停
            console.log('--- 2 ---');
            yield 'nose'
            console.log('--- 3 ---');
            yield 'head'
        }
        for(let item of gen()){
            console.log(item);
        }
    </script>

打印效果:

 回调地狱:经常因为某些逻辑导致写出一层嵌套一层的回调函数,如果嵌套的很多,将会极大的影响到代码逻辑和可读性,这种代码就被成为回调地狱。

例:

setTimeout(() => {
				console.log(111)
				setTimeout(() => {
					console.log(222)
					setTimeout(() => {
						console.log(333)
					}, 3000)
				}, 2000)
			}, 1000)

解决方法:把每层嵌套单独拿出来

	function one(){
				setTimeout(()=>{
					console.log('111');
					iterator.next()
				},1000)
			}
			function two(){
				setTimeout(()=>{
					console.log('222');
					iterator.next()
				},2000)
			}
			function three(){
				setTimeout(()=>{
					console.log('333');	
				},3000)
			}
			function * gen(){
				yield one()
				yield two()
				yield three()
			}
			let iterator = gen()
			iterator.next()

实现效果如下图:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Southern Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值