00:00
好,那么接下来呢,我们回到我们的代码当中,那genator的函数基本用法呢,其实也是非常简单的啊,那接着呢,我们新建一个文件,比如说呢,我们就叫genator OK,那当然是第2JS啊,就这样了,好,那首先呢,我们先不去管这个整瑞ta到底怎么用啊,那这里呢,我们先去生一个普通的函数,用呢,就叫for,好,那for里面呢,我们先去写一个代码,就consol log来一个T1 OK,那基本的用法呢,也是非常简单的,我们直接呢使用后面的这个调用就可以了,这个呢,我们也就不再去做测试了,是非常基础的一个内容,那generator的生成器函数怎么去用呢?我们将一个。
01:01
普通的函数的函数关键字后面加一个星号,那它呢,其实就成了一个整个的生成器函数,那这个写法呢,也不固定啊,你可以在function形的后面去加,那你也可以把它这个型号呢,放到关键字和函数名的中间,当然你也可以放到函数名的前面,这个都是可以的,那我个人呢,是习惯性的将这个星号放到他们两个中间,那么一旦有了这个星号的这个函数就不是一个普通函数了,它的含义呢,就是一个整个生成器函数,那生成器函数和其他的函数的和普通函数的区别在于什么呢?我们普通函数在调用时呢,函数里面的代码呢,就一次的往从上往下去执行了,但如果是一个生成器函数,当你去调用函数时呢,它给你返回的结果啊,并不是函数的执行,而是返回一个叫做便利器对象,那么这里呢,我们也记一下就是。
02:01
函数调用会返回一个生成器对象啊,叫便利器对象往前便利器对象OK,那此时呢,我们就可以使用一个变量来去接收一下,比如叫cost,然后这里呢,我们给它起一个名字就叫J,等于那拿到这个对象有什么作用呢?请注意你在生成这个对象时呢,函数里面的代码是不执行的,比如现在呢,我们其实就可以去执行一下,我们使用noe的方式呢,去执行我们这个枕流,那么现在你会看到我的空台呢,并没有任何的打印,那原因就在于我们在调用这个函数时呢,里面的代码是不执行的,想让里面的代码去执行呢,也是非常简单的,我们使用这个便利器对象GA,然后呢,调用它的点next的这个方法就可以了,那这个点next的方法是可以去执行函数里面的代码了。
03:01
我们再一次执行呢,我们就能够看到这个题一了,那除此之外还有什么呢?在生殖器函数中还有一个关键字在这里呢,我们也去实现一下,叫做页,那接着这个关键字有什么作用呢?后面我们再跟一个字符串,那紧接着呢,我们再来去做一个测试,那此时你会发现这里并没有什么太大的区别,但是它有一个最大的问题在于,如果页的后面还有代码,那我们继续去执行T2保存,当你再一次的去执行时呢,你会发现依然只打印了T1,它的原因就在于我们在使用便利器对象去调用点next方法时呢,它最终执行到的是页的这个位置,如果页的后面再有代码呢,是不会被直行道的,那我们呢,也可以把页呢称之为叫做暂停。
04:01
所以这里呢,也一定要注意,就是生成器最大的一个特点,实际上也就是让我们函数中的代码可以有一个叫暂停的功能,那你说暂停之后,我继续想要去执行这个T2,怎么去做呢?我们既依然可以使用ga.nextx再一次的去调用,那么再一次的调用呢,就会从上一次暂停的地方呢,继续往下去执行,所以我们再一次的执行之后呢,你会发现这个T1和T2呢,全部都打印出来了,那这时整生成器函数的一个最简单也是最直接的一个使用方式,那除此之外呢,其实我们在调用这个next时呢,还会给我们返回值,那返回的值是什么呢?我们可以通过这样的一个方式来去验证,比如说我们使用这个constant,然后呢,把这个页给它拿过来啊,是用这个页这个变量的来去来去接收一下,接收完之后呢,我们可以在后面使用consoular log的方式呢,去打印这个YD,好我们保。
05:01
保存一下,然后呢去执行,你会发现这里呢就是给我们返回了一个对象,对象里面呢有两个属性,一个属性叫做value,那value是什么呢?就是你前面再去执行页的时那结果,而还有一个值呢,叫做当,那当的结果呢,是在这里显示的false,那它最终要展示的含义呢,实际上就是表示我当前还有没有下面的代码,如果我当前的这个函数后面还有代码没有执行到,那么down的结果呢就是一个false,而如果你后面是没有代码了,也就是说我当前执行就结束了,这个函数的后面没有任何代码了,那这样的结果呢,就会是一个true,那就意味着比如我们在后面再一次的去调用NEX的时候呢,哎,我们其实也是有一个发回值的,那这里呢,我们还是使用这个cost的方式来去接收一下,比如这里呢叫YD2,当于然后我们。
06:01
再一次的通过conso.log的方式去打印这个YD2,那这个时候呢,你就能够看到不一样的内容,弹出来的结果呢,Value就是一个案例范,因为没有了页,也没有了这个具体执行的值,那当的结果呢,就是一个true,那就意味着这个conso log2后面的这个生成器函数呢,就从此往后就没有其他的代码了,那这时gen生成器函数的一个最基本的用法,那除此之外,我们再去调用这个next时呢,其实还可以向它去传值,那传值的作用是什么呢?就是我们可以在下一次调用next时,我们在页这里可以接收它的返回值,请注意第一个next呢,是执行的页的后面的内容,而下一次的next呢,从页的前面这里给它去执行,或者说你前面没有代码的话,那就是从下一行代码开始执行,那什么时候前面会有代码呢?就是我们下。
07:01
下一次想再去拿到结果是,比如这里呢,我们可以传一个四四进去,那我想拿到这个四四呢,你就可以在上一次液的,也就是上一次这个next调用时暂停的地方来去接收这个值,在这里呢,我们可以使用这个cost来去接收一下,比如叫V,那么在下一次的结果时呢,我在下一次的这个调用next时呢,我就可以拿到这个结果V,那这就是你下一次调用时传入的这个四四就可以在这里接收到了。好,那么接着呢,我们可以去使用一下,那么现在呢,就能够看到打印出来的444,那这是gen的一个最简单最直接的使用方式,那么它到底有什么样的作用呢?其实这里就能够很明确的看出来,我们就可以使用整个给我们提供的函数的最大特点也就是暂停。那有了。
08:01
它呢,我们就可以让我们的异步代码在执行时没有结果之前让它停掉,那也就是说我们可以在页的后面的代码当中呢,去把我们的异步执行的任务呢放到这里,那此时我们就可以利用生成器这个函数暂停的特性来去等待异步最终给我返回的结果,那么回到我们的异步当中,那我们应该怎么去使用它呢?好,那接下来呢,我们来看一下gen瑞使用的异步方案。
我来说两句