【原文】Node.js v 7 Nightlyバージョンのasync/await小実践


初心者からの海外技術ブログRisingStockのもう一つのNode.js関連の技術記事です.原文はこちらをご覧ください.
本文
Node.js v 7のasync/await実践
数ヶ月前、JavaScriptエンジンV 8はasync/awaitの特性に加入しました.Node.jsもV 8バージョンを更新し、最新のNightlyバージョンはついにasync/await特性のV 8エンジンに加入しました.
注意:現在のasync/awaitの特性は非定常バージョンのNightlyにしかありません.生産環境には使わないことを提案します.
async/awaitとは何ですか?
まず、非同期プログラムをPromiseでどうやって作るかを見てみます.以下の小さな例は、Fetch APIおよびPromiseを介してデータを取得する方法を示している.
function getTrace () {  
  return fetch('https://trace.risingstack.com', {
    method: 'get'
  })
}

getTrace()  
  .then()
  .catch()
async/awaitを使用することにより、Promiseawait機能を実現することができます.前の結果が戻るのを待つために、ブロックなしで暫定コードを実行できるという意味です.この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 v 7をインストールする
    まず、最新の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でウェブサーバを作成する
    Kooa v 2を例にとると、Kooaは中間部品形式の非同期関数をサポートしている.これまでは、まだトランシーバーでしか実現できませんでした.
    中間部品で簡単に非同期関数に入ることができます.
    // 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) 
    
    このように、Kooaでサーバーを作成して、それを実行します.
    node --harmony-async-await app.js
    
    いつからasync/awaitが使えますか?
    Node.js v 8は、次の安定バージョンで、async/await機能をサポートします.2017年4月に発行されます.その前に、Node.js v 7バージョンでコードを試してみてください.
    THE END