首先,async / await
是什么?简单来说,它就是 Generator 函数的语法糖
特点:
- 内置执行器
Generator 函数执行必须靠执行器,所以才有了 co 模块,而 async 函数自带执行器,也就是说 async 函数的执行与普通函数一摸一样,只要一行 - 更好的语义
async 和 await 比起星号和 yield,语义更加清晰,async 表示函数里有异步操作,await 表示紧跟在后面的表达式需要等待结果 - 更广的使用性
co 模块约定,yield 命令后面只能是 Thunk 函数或 Promise 对象,而 async 函数的 await 命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作) - 返回值是 Promise
async 函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便许多,可以 then 和 catch 方法指定下一步操作
进一步说,async 函数可以看作由多个异步操作包装成的一个 Promise 对象,而 await 命令就是内部 then 命令的语法糖
async 函数多种形式
// 函数声明
async function foo () {
}
// 函数表达式
const foo = async function () {
}
// 对象的方法
let obj = {
async foo () {
} }
obj.foo().then()
// Class 的方法