Bootstrap

Generator和async

什么是Generator函数

Generator函数与普通函数的区别是该函数可以分步骤阻塞,不像普通函数需要一路走到底,就像是Generator生成一堆的小函数,只有主动调用next()才会一个个的执行这些小函数。总结起来就是Generator函数中间可以停下来,可以使用yield来暂时的放弃执行。

拿一个形象的例子:普通函数好比是坐高铁或者乘坐飞机,我们只有到达目的地了,才停止下来,中间是不允许有停歇的,但是Generator函数好比是乘坐计程车,当我们需要在某个地方去做什么事,比如上个厕所,是可以叫师傅在某地方等一会,回来了再继续赶往目的地

yield的理解与使用

Generator是一个状态机,封装了多个内部状态,执行 Generator 函数会返回一个遍历器对象,返回的遍历器对象,可以使用next依次遍历Generator函数内部的每一个状态。Generator函数是分段执行的,yield表达式是暂停执行的标记,而next方法可以恢复执行。Generator 函数的执行必须靠执行器。

yield可以传参也可以返回内容(一般的返回的是上一步执行的结果)。一个yield就是一堵墙,墙的两面都是小的函数,只有墙的一面的函数执行完了,才可以接着执行另一面的函数。如下图帮助理解:
在这里插入图片描述

yield传参的形式与意义,如下图:
在这里插入图片描述
Generatoryield综合使用,如下伪代码:
在这里插入图片描述

Generator相比Promise的优势

Promise也是处理异步的,但为什么会再出现generator,是因为当我们使用promise的时候,如果中间需要有一些逻辑的判断,则这样写出来的promise代码相比普通的函数而言是没有任何的优势的。但是如果使用generator可以简化很多,并且是有序,正确的执行 每道工序。

总结:promise适合处理一次读一堆的异步操作,而generator适合在读的过程中有一些逻辑的处理,分批,有顺序的处理。简单的来说是generator是对promise的封装

async函数

async函数是Generator函数的语法糖,将Generator的星号换成asyncyield</

;