Async分析

一、定义

       Async函数是Generator函数的语法糖,但相较来说比Generator函数更强大一些。主要用于1解决一次异步调用异步函数的问题,即当第一个异步调用结束后,再调用第二个异步函数;等第二个调用完成后再调用第三个的这种情况。在以往的写法里,需要进行回掉函数多层嵌套才能实现,但这种写法会导致多层回调函数嵌套,既不方便维护,也不方便解决。而新的写法可以解决以上的这些问题,将其变成类似同步函数一样的写法,从而能够极大的减轻代码的复杂度。

二、函数示例

       使用Generator函数实现依次读取两个文件,代码如下:

                                     

       写成async函数,就应该是下面这样:      

                                    

       一比较就会发现,async函数就是将Generator函数的星号(*)替换成async,将yield替换成await而已。

三、Async函数的优点

       通过比较Async函数和Generator函数的区别,可以明显发现,前者对后者的改进,体现在以下三点:

       (1)内置执行器。Generator函数的执行必须依靠执行器,所以才有了co函数,而async函数自带执行器。也就是说,async函数的执行,与普通函数一模一样,只要一行:var result = asyncReadFile();

       (2)更好的语义。async和await,比起星号和yield,语义更清楚了。async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。

       (3)更广的适用性。co函数库约定,yield命令后面只能是Thunk函数或Promise对象,而async函数的await命令后面,可以跟Promise对象和原始类型的值(数值,字符串和布尔值,但这时等同于同步操作)。

posted @ 2018-04-02 16:00  大白开  阅读(121)  评论(0编辑  收藏  举报