基本概念:
异步操作的方式:
1)callback:符合一定条件时,可以执行该段程序,是横向发展,所以可能造成callback hell(回调地狱);
2)Promise:根据Promise实例状态,从而决定下一步的操作, 是纵向发展的,但会出现代码冗余,语义不清晰;
3)generator:利用同步化语句处理异步操作,特点:
a)利用next方法分阶段执行generator函数内部的代码;
b)generator函数可以内外互相交换数据,yeild输出, next中的参数输入;
c)generator函数内部采用了try-catch方式,则外部调用throw方式抛出异常,内部可以捕捉异常进行处理;(外部抛出,内部扑捉)
async函数:异步操作的函数, 是generator的提高版;
async语法特点:async+await组合; generator:*+yield组合;
eg:
async function A(){
let a1=await B();
let a2=await C();
}
generator函数与async函数的区别
1)generator要么手动执行(ne由于xt),要么自动执行(外加co模块)才能运行;
async函数由于内置执行器,所 以可以一旦调用就自动执行代码,运行并输出最后的结果;
2)generator函数返回的是iterator对象;
async返回的是promise对象;
3)generator函数语义化不明显;
async函数语义化更为明显,它定义的函数为异步函数,await表示等待其后表达式的执行完成;
async函数运行规则:
1)async函数声明该函数为异步函数,await只存在与async函数中;
2)await+非promise对象:立即执行,不用等待;
await+promise对象:等待Promise对象完成,只有完成了才能继续向下执行;
3)await可以获取promise对象的返回值状态
4)可以在async函数中采用try-catch模式捕捉异常;
5)async函数返回一个Promise对象,该对象为:若async中所有Promise都为resolved,则为resolved;若某一个promise对象为rejected,则终止执行async函数,并返回rejected的promise对象;