即将到来的 ES 2016 中有一个 async/await 特性,微软浏览器 Edge 目前已支持这一特性,在Edge 最新的预览版中仍需开启实验性标志位才能进一步体验,但是想要在未来被广泛接受,走出这一步至关重要。
JavaScript 天生是异步的,功能非常强大,但与此同时,开发者想要实现简单的功能却需要写非常多的代码,“回调地狱”是每一个开发者的伤痛。就在几年前,开发者们开始拥抱 promise ,从此你就可以用一种更好的方法来处理异步代码。promise 先进的理念使得它成为 ES6 中不可或缺的一部份。
传统的 promise 需要将所有的回调代码块连接起来, async/await 特性比 promise 更进一步,消除了这一方面的顾虑。在下面的示例中,getJsonAsync 函数返回一个 promise,代码中 async/await 的作用是让开发者以更偏向同步的方式来连接 promise。
async function getServerData() { try { // 一旦 promise 被解决了,值就会被返回 var json = await getJsonAsync(); } catch (e) { // 如果 promise 被拒绝,代码最终会在 catch 代码块中结束执行 } }
C#开发者可能会发现这样的语法似曾相识:微软在 C# 5.0 中引入了 async/await 特性,有了这个特性,开发者可以用同步的方式书写异步代码,不需要显示地连接这么多代码。async/await 同样也是 JavaScript 种的语法糖,大大减少使用样板代码的需求。
这个特性是 Windows 内部程序的一部份,在 build 10547 中可用。一定要在about:flags
窗口中启用“启用实验性 JavaScript 特性”标志位。
到目前为止,其它浏览器尚未支持这一特性。然而,转译器 Babel 早已将它作为实验性特性实现了出来。其它浏览器马上也会跟进,Mozilla 正在紧锣密鼓地实现中。
在浏览器中实现这个特性是它在ECMAScript 标准进程中的一个里程碑,async/await 目前处于“候选提案”的第3 阶段。对于一个提案而言,想要推进到最终的第4 阶段,必须要经过代码实现的过程。Brian Terlson 是async/await 的拥护者,他在2015 年纽约Qcon 大会上围绕这一特性以及TC39 组织关于ES2016 的进程规划进行了一次演讲。
评论