Node 7.6 默认支持 Async/Await
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 )关注我们。
更多内容推荐
-
Node.js 12 发布!更快启动速度、默认 TLS 1.3
本次发布的重要特性包括:更快的启动速度、最好的默认堆内存分配,以及对V8、TLS、llhttp的升级。
-
TypeScript 1.7 发布:支持 async/await、模块化、多态 this 和求幂语法
伴随着Visual Studio 2015 Update 1的发布,TypeScript 1.7也发布了,新版本默认支持ES6 (ECMAScript 6)的async/await以及模块化特性,支持多态“this”类型,支持ECMAScript 2016提出的求幂语法。详细的变更列表,可以查看GitHub上的路线图。
-
Google Puppeteer 加入到 headless Chrome 的工具行列
Chrome DevTools团队发布了Puppeteer,一个基于Node API的headless Chrome工具。它加入了现有工具的行列,旨在解决开发人员在使用Chrome DevTools协议时遇到的痛点。Google的工具给Web开发人员带来了更多的选择。
-
微软发布 TypeScript 2.0 RC 版本
微软发布了TypeScript 2.0的RC版本。在TypeScript的发布候选版本中,最为重要的更新之一就是tagged union。Typescript的项目主管这样说到,“借助tagged union功能,我们能够按照现在编写JavaScript的模式,更加容易地实现类型的安全性”。
-
谷歌发布 V8 JavaScript 引擎 V7.0 和 V7.1:为 WebAssembly 增加关键特性
谷歌V8 JavaScript引擎的最新7.0和7.1版本提高了JavaScript内存性能,为WebAssembly增加关键特性,并引入一些语言改进。
-
Flutter 动态创建 UI 实现方案
flutterdynamic 是一个能动态创建Flutter应用的引擎。flutterdynamic不但支持写UI,还支持写代码逻辑。
2020 年 12 月 22 日
-
Node.js v8.0.0 带来了哪些主要新特性
Node.js于5月30号在其官方博客上发布了Node.js v8.0.0。这一版本将成为当前的长期维护版本,从2017年10月开始到2019年12月31号。而Node.js v6.0.0将会在2018年4月进入维护模式,并于2019年4月结束。
-
第 190 讲 | 狼叔:2019 年前端和 Node 的未来—Node.js 篇(下)
做一个坚定的Web信仰者,把握趋势,选择比努力更重要!
2019 年 3 月 20 日
-
RxJS 的异步、LINQ 和未来
Reactive Extensions for JavaScript 2.2包含一个可选的组件(rx.async.js),用于异步数据源。它满足了绑定到事件、回调和promise的需要。未来还将支持LINQ风格的查询表达式解析。
-
Typemock Isolator++ 更新,提供 64 位支持
Typemock发布了Isolator++更新,支持测试为Windows平台编写的64位C/C++代码,还支持测试最初编写时没有考虑测试的遗留代码。
语言 & 开发 -
在交互环境中使用 TensorFlow
2019 年 1 月 7 日
-
OpenResty 概述
2019 年 1 月 29 日
-
Lodash 发布版本 4.0,新增更小的核心和大量的改进
Lodash 4.0.0 has been released. This new version adds a new, smaller core library and includes plenty of new features and breaking changes. Support for IE 6-8 has been dropped and the library is no longer available on Bower.
-
Next.js 7 发布,构建速度提升 40%
Next.js团队发布了其开源React框架的7版本。该版本的Next.js主要是改善整体的开发体验,包括启动速度提升57%、开发时的构建速度提升40%、改进错误报告和WebAssembly支持。
-
Dartium 登陆 Android
两周前,聚焦于移动开发的Dart 1.5发布了。它包含了一个可以在Android上运行的Dartium版本,同时对编辑器进行了改进,以便支持调试用Dart编写的移动网页应用。
-
75 | 软件版本迭代的规划
在不同阶段,版本迭代的侧重点会有极大的不同。
2020 年 1 月 21 日
-
JavaScript 这几种内存泄露写法,你要小心了
讲师介绍: 潘松奎,贝壳找房资深前端开发工程师。目前在贝壳原石组主要负责开发提效的相关开发。大学主修通信工程专业,擅长JavaScript、Node.js,有5年的前端开发经验。 问题背景: 随着前端工程的复杂度不断提升,交互的流畅性和系统稳定性对前端提出了更大的挑战。而内存泄漏在开发的过程中难以发现,大部分内存泄露问题的发现都是在生产环境阶段发现的。在通常情况下,内存泄漏并不会影响应用的功能,直到应用运行时间足够长,请求或者操作足够多的话,问题才会暴露,同时也会带来一些损失。那为什么会出现内存泄漏呢?以及前端 JavaScript 开发过程中会有哪些写法会导致内存泄漏呢?本文将给你做详细分析。 内容看点: 从内存的生命周期来看内存泄露出现的环节 从垃圾回收机制来看发生内存泄露的深层原因 引起内存泄漏的常见写法及避免方式
评论