Generator
#
什么是生成器Generator
的基本语法可以看一下MDN的介绍
#
语法它的原型上有三个方法,其中next()
最常用
#
使用使用next方法
根据上面内容输出的内容,我们可以考虑一下生成器返回的迭代器,到底是个什么东西?
#
什么是迭代器迭代器 是一个有next方法的对象
#
实现迭代器尝试给对象实现一个迭代器
#
用生成器实现迭代器可以看到迭代器,就是返回了一个对象,上面有next方法,当然上面的代码也可以用生成器实现,生成器会返回一个迭代器,下面代码与上面功能类似。
#
yield 的返回值与直观上的感受不同,第一次yield
的返回值不是1
,而是'a'
是第二次调用next
时传入的参数,画了一张图,可能更好理解上面的流程。或者直接跳转到原理部分查看。
#
为什么这样设计首先创建两个txt文件,内容如下:
1.txt
number.txt
然后在node中,依次读取他们,需要通过获取第一个文件的名字来获取第二个文件的内容
可以看出,虽然这样实现了顺序调用,但是也实现了回调地狱,我们要如何使代码更优雅实用呢?
- 可以看到当前是有部分代码有重复逻辑的,不难想到可以使用递归实现简化。
- 老一辈的开发者也当然想到了,所以有一个著名的叫做
co
的库,就是为了简化当前的需求。 - 跳转至co章节
#
生成器的原理将下列代码通过https://babeljs.io/
进行编译。
得到以下代码,可以看到通过regeneratorRuntime
类上面的wrap
方法调用当前传入的gen
函数最终之实现了迭代的效果。那么这个regeneratorRuntime
的wrap
做了写什么呢?
#
总结- 了解了什么是生成器和迭代器
- 使用生成器来进行异步请求
- 生成器的原理