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。

转载:http://www.infoq.com/cn/news/2017/03/node-76-async-await?from=timeline&isappinstalled=0

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

Node 7.6默认支持Async/Await的更多相关文章

  1. WCF透明代理类,动态调用,支持async/await

    我们希望WCF客户端调用采用透明代理方式,不用添加服务引用,也不用Invoke的方式,通过ChannelFactory<>动态产生通道,实现服务接口进行调用,并且支持async/await ...

  2. 为什么 array.foreach 不支持 async/await

    一.背景 react 项目中,渲染组件时,显示的数据一直有问题,本来以为是 react 组件的问题,后来才发现罪魁祸首在 fetch 数据的过程,因为我用了 async/await ,而却搭配了 fo ...

  3. ES8 async/await语法

    Async/await的主要益处是可以避免回调地狱(callback hell)问题 Chromium JavaScript引擎 从v5.5开始支持async/await功能,Chromium Jav ...

  4. 小程序如何支持使用 async/await

    下载 regenerator-runtime npm i regenerator-runtime 如何使用 在小程序中,不认识 node_modules 文件夹,无法通过以下方法来直接找到包文件 im ...

  5. 小程序如何支持使用 async/await (构建npm版)

    前言 小程序本身是不支持async/await语法的,但有些应用场景,我们使用async/await会使得代码更简洁,也更易于维护,用过都知道是有多爽的.既然小程序不支持,那我们可以借助 fackbo ...

  6. ASP.NET 中的 Async/Await 简介

    本文转载自MSDN 作者:Stephen Cleary 原文地址:https://msdn.microsoft.com/en-us/magazine/dn802603.aspx 大多数有关 async ...

  7. ASP.NET 上的 Async/Await 简介

    原文链接 大多数有关 async/await 的在线资源假定您正在开发客户端应用程序,但在服务器上有 async 的位置吗?可以非常肯定地回答“有”.本文是对 ASP.NET 上异步请求的概念性概述, ...

  8. 以Python为例的Async / Await的编程基础

    来源:Redislabs 作者:Loris Cro 翻译:Kevin (公众号:中间件小哥) 近年来,许多编程语言都在努力改进它们的并发原语.Go 语言有 goroutines,Ruby 有 fibe ...

  9. 【转】以Python为例的Async / Await的编程基础

    转, 原文:https://www.cnblogs.com/middleware/p/11996731.html 以Python为例的Async / Await的编程基础 -------------- ...

随机推荐

  1. KEIL中函数定义存在但go to definition却不跳转的原因

    可能是 go to definition 函数的地方,被包含在一个未使能的条件编译宏内部,因为这样KEIL在编译时,就未将该条件编译宏内部的信息编译入工程的Browse Information.

  2. WC 2019 记

    “在下一次挑战来临时,还能否有足够的勇气和力量重新提起这被震掉两次的剑呢?” 难得来参加一次$WC$,这是第一次来,也很有可能是最后一次了(我也好希望有下一次啊,哪怕这可能再渺小,如同浩瀚星空中一丝辰 ...

  3. JAVA中String.format()的使用

    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.format()方法有两种重载形式:1.format(String format, Object... args) 新 ...

  4. mysql数据库user表host字段的%问题

    搜索: mysql数据库user表host字段的%问题 连接:http://blog.csdn.net/xiaomengh/article/details/48706149 在mysql数据库中,使用 ...

  5. QtCreator添加第三方头文件和类库

    在Qt Creator的项目中添加头文件和库 在Qt Creator中的工程中,工程通过.pro文件管理. 额外需要连接的连接库 unix:LIBS += -L your_lib_path -lyou ...

  6. sort逆序(char String)

    import java.util.Arrays; import java.util.Collections; import java.util.Scanner; public class Main { ...

  7. 浅谈js的数字格式

    除了正常我们常用的十进制(如5,8,12.123等),js还可以直接表示2.8.16进制 1.二进制 二进制是以0b开头 0b10; 2.八进制 八进制是以0开头 010: 3.十六进制 十六进制是以 ...

  8. Hadoop基础-配置历史服务器

    Hadoop基础-配置历史服务器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比 ...

  9. python---redis缓存页面实现

    import tornado.web from controllers.BaseController import BaseRequestHandler import redis pool = red ...

  10. Ubuntu 下 Tomcat7 的安装和配置

    tomcat下载地址:http://tomcat.apache.org/download-70.cgi 声明:下面的内容和原创笔者的博文的内容差不多,不一样的只是tomcat7的安装目录不同,我按照我 ...