【譯文】Node.js v7 Nightly版本的async/await小實踐

來自新手向國外技術博客RisingStack的又一篇Node.js相關技術文章,原文請看此javascript

正文

Node.js v7的async/await實踐

幾個月前,JavaScript引擎V8加入了async/await特性。Node.js也隨之更新它的V8版本,最新的Nightly版本終於加入了async/await特性的V8引擎。java

注意:目前async/await特性只在非穩定版本的Nightly中才有。暫時建議不要用於生產環境。node

什麼是async/await?

首先,咱們來看看如何用Promise來作異步編程。下面的小例子展現瞭如何經過FetchAPI和Promise獲取數據:git

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

getTrace()  
  .then()
  .catch()

經過使用async/await,可在Promise中實現await功能。意思是它能以非阻塞的方式暫定代碼的執行,以等待上一個結果返回。若是這個promise最終的狀態不是resolved而是rejected,它會將rejected的值拋出異常,能夠用try/catch塊捕獲。github

若是把上面的例子用async/await實現,會是下面這樣:web

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的信息,推薦下面兩篇文章:編程

在不使用轉譯器的狀況下,使用async/await

1. 安裝Node.js v7

首先,要獲取最新的Nightly buildsapp

若是你使用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

相關文章
相關標籤/搜索