Node 7.6 默认支持 Async/Await

  • 2017-03-02
  • 本文字数:862 字

    阅读完需:约 3 分钟

Node.js 7.6 正式默认支持async/await功能,并能够使低内存设备获得更出色的性能。

Node 7.6 对async/await的支持来自于将 V8 (Chromium JavaScript 引擎)升级至版本 5.5。这意味着async/await不再是实验性功能,使用它时无需指定--harmony参数,此参数用来开启那些几乎已完成但被V8 团队认为还不稳定的功能。

Async/await的主要益处是可以避免回调地狱(callback hell)问题,该问题源于把一系列异步操作嵌套于它们各自的回调函数里。

下面代码演示了如何使用回调函数来处理两个异步操作:


function asyncOperation(callback) {
 asyncStep1(function(response1) {
   asyncStep2(response1, function(response2) {
       callback(...);
   });
 });
}

使用async/await可以简化代码,使代码看起来就像同步操作:


async function asyncOperation(callback) {
   const response = await asyncStep1();
   return await asyncStep2(response);
}

解决回调地狱的另一种方法是使用 Promises,它是 JavaScript 里存在很久的一个特性。使用 Promises,上面的例子则变成:


function asyncOperation() {
 return asyncStep1(...)
   .then(asyncStep2(...));
}

但是在一些更为复杂的场景中, Promises 这种方法会变得很笨重

V8 5.5 还对堆大小和区域使用(zone usage)做出了若干改进。与 V8 5.3 相比,这些改进能使低内存设备的内存占用量降低多达 35%。

Node 7.6 还有另一些值得注意的改进:

  • 基于新调试器协议node --inspect重写旧CLI 调试器 node debug。在未来 V8 版本中,将只支持node --inspect
  • 支持file:相关协议已经加入 fs,因此你可以写成fs.readFile(URL('file:///C:/path/to/file');, (err, data) => {});

除了 V8 5.5 外,Node 7.6 还包括了其它一些已经更新的依赖,比如跨平台的异步 I/O 库 libuv 1.11 和 zlib 1.2.11。

查看英文原文 Node 7.6 Brings Default Async/Await Support


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。