资讯专栏INFORMATION COLUMN

【译文】Node.js v7 Nightly版本的async/await小实践

Little_XM / 3495人阅读

摘要:正文的实践几个月前,引擎加入了特性。注意目前特性只在非稳定版本的中才有。暂时建议不要用于生产环境。意思是它能以非阻塞的方式暂定代码的执行,以等待上一个结果返回。在此之前,还它只能通过转译器来实现。

来自新手向国外技术博客RisingStack的又一篇Node.js相关技术文章,原文请看此。

正文 Node.js v7的async/await实践

几个月前,JavaScript引擎V8加入了async/await特性。Node.js也随之更新它的V8版本,最新的Nightly版本终于加入了async/await特性的V8引擎。

注意:目前async/await特性只在非稳定版本的Nightly中才有。暂时建议不要用于生产环境。

什么是async/await?

首先,我们来看看如何用Promise来做异步编程。下面的小例子展示了如何通过FetchAPI和Promise获取数据:

function getTrace () {  
  return fetch("https://trace.risingstack.com", {
    method: "get"
  })
}

getTrace()  
  .then()
  .catch()

通过使用async/await,可在Promise中实现await功能。意思是它能以非阻塞的方式暂定代码的执行,以等待上一个结果返回。如果这个promise最终的状态不是resolved而是rejected,它会将rejected的值抛出异常,可以用try/catch块捕获。

如果把上面的例子用async/await实现,会是下面这样:

async function getTrace () {  
  let pageContent
  try {
    pageContent = await fetch("https://trace.risingstack.com", {
      method: "get"
    })
  } catch (ex) {
    console.error(ex)
  }

  return pageContent
}

getTrace()  
  .then()

要了解更多关于async/await的信息,推荐下面两篇文章:

https://ponyfoo.com/articles/...

https://tc39.github.io/ecmasc...

在不使用转译器的情况下,使用async/await
1. 安装Node.js v7

首先,要获取最新的Nightly builds。

如果你使用nvm的话,可以使用下面的方式安装:

NVM_NODEJS_ORG_MIRROR=https://nodejs.org/download/nightly  
nvm install 7  
nvm use 7  
2. 用async/await运行个文件试试

先来创建一个简单的JavaScript文件,用setTimeout实现一个函数的延迟执行,并且用async/await来调用。

// app.js
const timeout = function (delay) {  
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve()
    }, delay)
  })
}

async function timer () {  
  console.log("timer started")
  await Promise.resolve(timeout(100));
  console.log("timer finished")
}

timer()  

文件创建好之后,试下运行它:

node app.js 

不过这样是不行的,因为async/await目前还需要特殊的方式执行,如下所示:

node --harmony-async-await app.js  
3. 用async/await创建web服务器

以Koa v2为例,Koa现在支持中间件形式的异步函数。在此之前,还它只能通过转译器来实现。

你可以以中间件形式简单地传入一个异步函数:

// app.js
const Koa = require("koa")  
const app = new Koa()

app.use(async (ctx, next) => {  
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

app.use(ctx => {  
  ctx.body = "Hello Koa"
})

app.listen(3000) 

像这样,就用Koa创建了一个服务器,接下来运行它:

node --harmony-async-await app.js
何时可以开始使用async/await

Node.js v8,下一个稳定版本,且会支持async/await功能将于2017年4月发行。在那之前,你都可以在Node.js v7版本上试验你的代码~

THE END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86503.html

相关文章

  • JavaScript 异步

    摘要:从最开始的到封装后的都在试图解决异步编程过程中的问题。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。写一个符合规范并可配合使用的写一个符合规范并可配合使用的理解的工作原理采用回调函数来处理异步编程。 JavaScript怎么使用循环代替(异步)递归 问题描述 在开发过程中,遇到一个需求:在系统初始化时通过http获取一个第三方服务器端的列表,第三方服务器提供了一个接口,可通过...

    tuniutech 评论0 收藏0
  • Async/Await替代Promise6个理由

    摘要:是基于实现的,它不能用于普通的回调函数。忧虑对于,也许你有一些合理的怀疑它使得异步代码不再明显我们已经习惯了用回调函数或者来识别异步代码,我们可能需要花数个星期去习惯新的标志。 译者按: Node.js的异步编程方式有效提高了应用性能;然而回调地狱却让人望而生畏,Promise让我们告别回调函数,写出更优雅的异步代码;在实践过程中,却发现Promise并不完美;技术进步是无止境的,这时...

    tuomao 评论0 收藏0
  • 【从前端到全栈】- koa快速入门指南

    摘要:前言随着技术的不断发展,前端工程师也被赋予了越来越多的职责。接下来这篇文章,完成一个简单的登录注册,能让你快速上手,成为一个小全栈工程师,快速开始安装因为已经完全支持语法,所以请保证的版本在以上推荐一个的多版本管理工具。 前言 随着技术的不断发展,前端工程师也被赋予了越来越多的职责。不再是从前只需要切个图,加个css样式就能完成任务的切图仔了。接下来这篇文章,完成一个简单的登录注册,能...

    邹强 评论0 收藏0
  • ES6-7

    摘要:的翻译文档由的维护很多人说,阮老师已经有一本关于的书了入门,觉得看看这本书就足够了。前端的异步解决方案之和异步编程模式在前端开发过程中,显得越来越重要。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。 JavaScript Promise 迷你书(中文版) 超详细介绍promise的gitbook,看完再不会promise...... 本书的目的是以目前还在制定中的ECMASc...

    mudiyouyou 评论0 收藏0
  • 【全文】狼叔:如何正确学习Node.js

    摘要:感谢大神的免费的计算机编程类中文书籍收录并推荐地址,以后在仓库里更新地址,声音版全文狼叔如何正确的学习简介现在,越来越多的科技公司和开发者开始使用开发各种应用。 说明 2017-12-14 我发了一篇文章《没用过Node.js,就别瞎逼逼》是因为有人在知乎上黑Node.js。那篇文章的反响还是相当不错的,甚至连著名的hax贺老都很认同,下班时读那篇文章,竟然坐车的还坐过站了。大家可以很...

    Edison 评论0 收藏0

发表评论

0条评论

Little_XM

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<