理解 Async Await

原文信息: 查看原文查看原文

Understanding Async Await

- Sarah Drasner

由于JavaScript的单线程处理方式,异步处理一直是JavaScript开发者的痛点。在ES6之后,我们可以使用PromiseAsync/Await的方式来更优雅地处理异步请求。

我们在日常开发中,应该会经常使用PromiseAsync/Await处理异步请求、异步操作等事情,但是还是会有很多开发者对PromiseAsync/Await的原理和具体实现不是很了解,这一块也经常在面试中被问到,要想完整地理解这块内容还是要花一些时间的。

这篇文章从Promise出发,介绍了底层原理和实现,内容有以下几个关键点。

Promise

Promise是一种“仿真”设计,依托现实中的场景,有几种状态:

  • pending: 初始化调用一个Promise时,还不确定它最终会是什么状态;
  • fulfilled: 表示操作成功完成;
  • rejected: 表示操作失败;

Promise中的then函数,是一个非常有意思的设计,它保证了异步流程的迭代执行,且易于拓展和处理。

Async/Await

Async/Await 是基于 Promise 的封装,让Promise的使用更加优雅,却打破了一定要通过then函数才能取到Promise的值的限制。

如果你想对Async/Await了解更多,可以去看下ES6中的Generator function,它是介于Async/AwaitPromise之间的一种异步处理方式。

Try, Catch, Finally

Promise中,我们可以通过catch函数来处理内部异常,但是Async/Await中没有响应的函数来处理异常情况。但这种情况也不是无解,直接上最通用的try/catch就能解决,当然还可以用finally来处理必须执行的流程。

文中内容稍微偏基础,建议阅读以下,强化知识点。

分享于 2020-01-14

访问量 950

预览图片