回调函数
把任务第二段单独写在一个函数中,等到重新执行该任务时,直接调用这个函数,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中。