ECMAScript 6新增了正式的Promise(期约)引用类型,支持优雅地定义和组织异步逻辑。
接下来几个版本增加了使用async和await关键字定义异步函数的机制。
注:本章示例将大量使用异步日志输出的方式setTimeout(console.log, 0,… params),旨在演示执行顺序及其他异步行为。
异步输出的内容看起来虽然像是同步输出的,但实际上是异步打印的。
这样可以让期约等返回的值达到其最终状态。
此外,浏览器控制台的输出经常能打印出JavaScript运行中无法获取的对象信息(比如期约的状态)。
这个特性在示例中广泛使用,以便辅助读者理解相关概念。
11.4 小结
随着ES6新增了期约和ES8新增了异步函数,ECMAScript的异步编程特性有了长足的进步。
通过期约和async/await,不仅可以实现之前难以实现或不可能实现的任务,而且也能写出更清晰、简洁,并且容易理解、调试的代码。
期约的主要功能是为异步代码提供了清晰的抽象。可以用期约表示异步执行的代码块,也可以用期约表示异步计算的值。在需要串行异步代码时,期约的价值最为突出。
作为可塑性极强的一种结构,期约可以被序列化、连锁使用、复合、扩展和重组。
异步函数是将期约应用于JavaScript函数的结果。
异步函数可以暂停执行,而不阻塞主线程。
无论是编写基于期约的代码,还是组织串行或平行执行的异步代码,使用异步函数都非常得心应手。异步函数可以说是现代JavaScript工具箱中最重要的工具之一。
