Node.jsで非同期処理の戻り値を利用する(Callback関数)

Node.jsの非同期制御(Callback関数)の使い方です。

Node.jsの非同期処理

Node.jsはノンブロッキングI/O処理という特徴があります。
Node.jsから他のプロセス(DBやAPI呼び出しなど)を実行した際は戻りをまたずに以降の処理が進みます。

JavaScriptは元々シングルスレッドで処理されるため、Node.jsの処理は基本的にシングルスレッドで処理されます。


例:
コード1
コード2
コード3
DB検索
コード4
コード5

基本的にはコード1 -> 2 -> 3と処理されますが、この場合コード4はDB検索の処理完了を待ちません。
コード4でDB検索結果を使用したい場合、DB検索の処理完了を待つ必要があります。

Node.jsの非同期制御

Node.jsの非同期制御には三種類あります。

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

2019年現在の主流は「3.Async/Await」です。

callback関数

今回はcallback関数について説明します。
callback関数は「関数の引数に関数を渡すことができる」Javascriptの機能で、Node.jsの非同期処理で使用することができます。

例:
// 非同期処理のテスト関数
// 1秒後に"Test OK"を返す
function doTestAsync(){
setTimeout(()=>{
result = "Tesk OK"
resultCheckCallback(result)
},1000)
}

// コールバック関数を定義する
const resultCheckCallback = (res) => {
testResult = res;
};

// 1秒後に"Test OK"を返すdoTestAsync関数にコールバックを引数で渡して結果を取得する
doTestAsync(resultCheckCallback)
// 1秒後に結果を表示(1秒以上待たないといけない)
setTimeout(()=>{
console.log(testResult)
},1000)

上の例ではcallback関数を定義していますが、定義せずに引数に関数を渡してもcallback関数です。

DB Read/WriteやFile Read/Writeを繰り返す処理ではcallback関数が大量に重なりcallback地獄と呼ばれます。
これから学ぶ人は「Async/Await」を覚えることが推奨ですが、初心者にもわかりやすい方法なのでまずはさくっと動かしたい人は使ってみてください。


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