async 本质上其实是generator函数的一层封装,是一个语法糖
async函数与generator函数的区别
1 内置了执行器 generator函数需要执行器才能被调用,而async函数是不需要的
2 更好的语义 async和await是需要一起配合使用的, async表明这是一个异步的方法或内部在调用一个异步的方法, await表明其后跟着的是一个异步任务, 只有当异步任务执行完成以后才会执行下一行代码, 否则就会一直阻塞在那里, 知道异步任务的结束
3 更广的适用性 co模块约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)。 更易于对异步函数的封装
4 返回值是promise对象 返回值更加统一,更便于操作
async的错误处理
由于await 处理的promise 只接受resolved 而reject不会被处理 所以需要使用try…catch来进行异常的捕获
多个await 只需要一个 try…catch 来捕获异常
封装promise 统一处理error
对promise函数进行一层封装 通过新的promise函数的resolved来处理调用的promise 可以做到对await的统一处理 函数更加的像一个同步函数了
1 |
|
上述代码仅供参考,不做实际用途