Generate 函数精解之一

本文介绍了Generator函数与普通函数的区别,强调其可阻断特性。Generator通过yield生成迭代器,迭代器的next方法用于获取yield表达式的值,并通过done属性判断是否结束。文章还通过实例验证了当yield后无值时,next方法的行为,并指出Generator在解决依赖问题和回调地狱方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        说起generator函数,先要了解它和普通函数的区别!大家都知道普通函数是不可阻断和挂起的,generator函数是可以阻断的,很多文档都喜欢用等待,但是我更喜欢使用阻断!         generator函数语法不难,*和yield,它生成一个迭代器,如果不清楚迭代器概念的,请自行百度。迭代器会对外暴露一个next方法,用来获取generator函数的相关yield内容。下面我们来看个例子:
      

         图中可以看出,我们调用test1生成了一个名为testGene的迭代器,迭代器对外暴露了一个next方法,我们调用next方法,迭代器依次返回包含字test1和test2的对象,心细的你还会发现,返回对象中还有一个done,done这个是用来表示迭代器对象是否变量结束,是否还能获得新值!如果done的值为false,说明还能通过调用next方法获得新值,如果done的值为true,说明已经无法通过next方法获得新值!

        做个小总结:generator函数产生一个迭代器,迭代器对外暴露一个next方法,通过这个方法,获得迭代器的yield的值,同时获得done,用来表示下一次next是不是能获取到值。

        看过上面的总结,我们来验证下一个问题,如果值没有在yield后面,看看迭代器能不能获取到,我们来测试下。

      

        测试结果验证了上面的结论,同时为我们执行同步操作提供了方案!调用test方法,返回一个test的迭代器函数,同时触发第一个console.log,然后迭代器函数通过next方法,唤醒test这个构造函数,获得yield后面的值test1,等到yiled后面的值获取后,因为下一行代码还是yield,所以继续通过next方法获取,接着,关键来了,获取test2这个值后,因为下面不再是yield,而是console.log,所以就执行了console.log,输出test3,然后才是最后一个next方法执行。

         应用场景有很多,比如解决一些依赖问题,回调地狱啥的,具体请大家自行百度!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值