异步编程

回调函数

把任务第二段单独写在一个函数中,等到重新执行该任务时,直接调用这个函数,callback(重新调用)

事件监听

发布/订阅

Promise对象

如果依次多个异步,就会出现多重嵌套。~使用了then方法把回调函数的横向加载改成纵向加载,但问题是代码冗余,看上去都是一堆then,原来的语义不清楚。

Generator函数

协程(多个线程互相协作,完成异步任务)。

协程就在于其中的yield,便是执行到此处执行权交给其他协程,yield命令是异步两个阶段的分界线。使代码很像同步。

Thunk函数

将参数放到一个临时参数中,再将这个临时函数传入函数体。

js中是将多参数函数替换成单参数函数。

可以自动执行Generator函数,

Thunkify模块

用于生产环境的转换器,如转换package.json的

Generator函数的流程管理

Co模块

用于Generator函数的自动执行,只要传入co函数就会自动执行。支持并发的异步操作,全部完成是才进行下一步。

async函数

实现异步最简洁,最符合语义,将Generator写法中的自动执行器改在语言层面提供。

es7提供,是Generator函数的语法糖。将Generator的 * 换成 async,将yield换成await。

async的改进有4:

1.内置的执行器。执行与普通函数一样。

2.调用了asyncReadFile函数,就会自动执行,输出结果,但Generator含药调用next方法或co模块。

3.async和await的语义化更好。

4.async的await后面可以是promise对象和原始类型的值;但yield后面只能是Thunk函数和Promise对象。

5.async的返回值是Promise对象,可以用then指定下一步操作;Generator函数的返回值是Iterator对象;

async函数用法:

最好把await命令放在try...catch中。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。