00:00
哈喽,大家好,这个小节呢,我们来再来做一个生成器函数的一个实例。那么这次呢,是这样子的,我们呢想来获取用户的数据。然后呢,还要获取订单数据,还要获取商品数据。注意这个获取数据呢,也是有这个先后顺序的,我们要先来获取用户数据。然后获取完以后啊,再来获取用户对应的订单。然后再获取订单对应的一个商品。当然这个代码是一个伪代码,并不是一个真实的,我们还是用定时器来模拟这个异步行为。好,接下来呢,我开始声明函数get users。然后在这呢,我来一个定时器,Set time out。第一个呢是回调,我们用箭头函数。第二个呢,时间这个间隔呢,我都做成一秒。
01:00
啊,Let data等于一个用户数据。OK,数据已经有了,在这放着,然后接下来我开始写第二个function,然后get orders。这是订单啊,获取呢用户的订单信息OK。也是一秒钟。啊,一秒钟以后呢,咱们获得数据let data等于一个订单数据。OK,然后下边还有一个是商品数据。Get good。然后呢,这个地方呢,写成一个商品数据。好了,搞定,现在呢,数据这个单个的任务封装已经搞定了,下边呢,我们如何按照既定的一个顺序来做这个事情呢?看一下,我们要先来获取用户,再来获取订单,再来获取商品。好,还是样子,我们来声明一个生成器函数。
02:06
然后接下来我们开始做啊,同学可能会说,哎,那要这样子的话,我们可以完全这样写呀,把它放到这儿。然后把orders放到这儿。然后把钩子呢放到这儿,肯定有同学会有这样一个想法,但是呢,我们这样做是不行的。为什么呢?因为这样做呢,不符合实际的一个场景。不符合实际的一个场景,就是说因为这个数据它们之间是有关联度的。啊,要有了用户才能得到用户的订单,有了订单才能得到订单里边对应的商品。所以说我们不能够呢,咱们直接这样去掉,直接这样调的话呢,是在真实场景里边得不到结果的。所以说要按照先后顺序去走。那怎么办呢?诶,我们这样子来做。我们首先呢,在这里把。Get users这个函数先调一下,当然调的时候前面要补上谁啊,补上这个YLD。
03:06
啊,补上业务的啊好,这是一个,然后再把orders翻过来,然后呢,再把子翻过来OK。然后咱们来看一看效果怎么样啊,找套路调用。生成器函数。啊,Let it等于一个G,然后接下来it.next让它跑起来。我们知道啊,这样调的话呢,会啊去运行第一段啊第一段代码。那运行完之后呢,会把它的一个执行结果返回,因为呢,咱们在这儿呢,并没有返回结果是一个unDeFined,所以咱们这儿呢,不需要接收。啊,不需要接收,但是这样做呢,有一个问题。啥问题呢,我们数据呢,在这儿放着呢。啊,我们没办法对数据做操作。这是一个挺尴尬的事情。
04:00
那咱们怎么办呢?别急,我们可以这样来做。调用next的方法。啊,并且将数据传入。然后点next,我将放进来。这是第二次调next。第二次,所以说它的这个实参将作为第一个ill的语句的返回结果。我这里来一个变量,Users等于它。然后呢,我们来看看结果怎么样,能不能获取到这个数据。保存。看一下用户数据有了。有了以后呢,下边对应的我们的订单数据也是如此,来一个点next,将data放进来。这是第三次掉next。所以说这个时参将作为第二个有的语句的返回结果。
05:00
That orders。Can log,打印一下orders保存,过一秒出,再过一秒出。注意,因为这里我们每一个任务都是定的一秒钟,所以说隔一秒出现,这是一个正常的结果。那么最后一个呢,也是样子,来一个点next data。然后下边这个位置我们做一个接收,Let goods等于它,然后can log打印一下goods保存。一秒,一秒,一秒。好,这样一来的话,你可以看看代码。啊,猛地看上去呢,你就会发现这个代码呢,跟我们的同步代码是非常非常像的。只是呢,多了一个要的语句,但是呢,实际上在运行时它是异步的。啊,它是异物的,这就是生成器函数在异步任务这块的一个表现。啊,他成功的解决了啊,回掉地域的问题。
06:01
好,这个案例我们就先介绍到这儿。
我来说两句