即将到来的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的进程规划进行了一次演讲。
查看英文原文: Microsoft Enables Async/Await in Edge Preview Build