Node.jsで非同期処理の戻り値を利用する(Async/await)

Node.jsの非同期処理

Node.jsで非同期処理の結果を処理する際にAsync/awaitを利用する方法です。
個人的にはcallback関数に比べて直感的に理解しづらかったので慣れない方でも理解しやすいように呼び出し元、呼び出し先(Async関数)のサンプルを用いて説明してみます。

前回の記事でも記載した通り、Node.jsの非同期制御には三種類の方法があります。

1. callback関数
2. Promise
3. Async/Await

1.callback関数の使い方はこちらの記事を参照ください。
Node.jsで非同期処理の戻り値を利用する(Callback関数)

「2.Promise」については「3.Async/Await」が上位互換的な機能なので割愛します。

callback関数については記述が複雑になる弊害がありますので、最近のライブラリやWebで見てもES2017で採用されたAsync/Awaitが使われることが多いです。

Async/awaitの使い方

サンプル

まずはAsync/awaitのサンプルです。

//(A)Async関数を定義 - asyncSample()
const asyncSample = async () => {
  //(B)非同期処理を記載(結果はPromise(resolve)で処理)
  let result = new Promise((resolve,reject) =>{
    setTimeout(function(){
      resolve("done")
    },1000)
  })
  //(C)awaitで非同期処理の結果を待つ
  //resultの処理が返ったら関数の呼び出し元に返す
  return await result;
}

//(A')Async関数を呼び出して処理
asyncSample().then((res)=>{
  console.log("Async function is " + res)
});

解説

(A)でAsync関数を定義して、(A')でAsync関数を呼び出しています。
(A)ではarrow関数を使っていますが、「async function()」のように関数定義時にasyncをつける必要があります。


(B)では非同期処理を記載しています。非同期になる処理をPromise内に記述します。Promiseでは通常resolveで値を戻しますので、resolveに戻したい値を設定します。例では固定値"done"となります。


(C)では非同期処理の結果を待ちます。例では(B)の処理でresultに値がresolveされるのを待ちます。
結果が設定されたらreturnで呼び出し元に返します。


呼び出し元の(A')では関数の戻り値を「.then」以下の関数で処理します。
asyncSample()が処理された後に、returnで返された結果をresとして、処理することができます。


こちらのサンプルでAsync/awaitの非同期処理を実装できるようになってもらえると嬉しいです。

参考:JAVASCRIPT.INFO Async/await

ビットコインを購入するならBITPOINT
BITPOINT