[Node.js] Promiseの使い方

 

非同期処理

基本的にコードは、上から下の順番に読み込まれていき、処理がなされます。

しかし、Node,jsでは時間のかかる処理は、終わるのを待つのではなく、他の処理を先に進めておくような仕様になっています。これを、非同期処理と言います。

以下にコード例を載せます。

同期的な処理なら、setTimeout関数の処理が終わるまで、下の処理に移動しないのですが、

 

Node.jsは非同期処理をするようになっているので、以下のような出力結果になります。

 

この非同期処理の内部の詳しい内容は、以下の記事内に書いたので、参考にしてください。

[node.js] 非同期callstackを解説!

2018.09.17

非同期処置は、I/O待ちを行わないためリソースを効率的に使うことができます。

ですが、何点か問題点があります。

 

コールバックでの非同期処理の問題

以下のコード例から分かるように、いくつかの問題点があります。

 

callbackで受け取った値をさらに使って、処理を行いたい場合などに、

コードがネストまみれになって非常に読みにくいコードになってしまいます。

また例外処理も、 一括でcatchできる処理にしたいです。

そこで使えるのが、promiseです。

 

Promise

非同期処理は非常に便利なのですが、コードが複雑になり処理を追いにくくなってしまいます。

そこで、非同期処理を同期的にコードを書けるようにするのが、promiseです。

早速いくつか例を挙げて使い方を見ていきましょう。

 

実行結果

 

resolve

処理結果が正常の際に呼びだす

reject

処理結果がエラーの際に呼び出す。

catch()でエラーを拾うことができる。

then()

callbackを設定することができる。

 

promiseを使わない時と比べて、格段に処理を追いやすくなっています。

またエラーキャッチすることで、例外が発生した際の処理も実装しやすいです。

 

同期処理と混ぜて実装

 

以下のように、then()をうまく活用することで、同期処理と非同期処理を混ぜて使うことができます。

 

実行結果

 

 

並列処理

複数の処理を並列で行いたい場合に、Promise.allで並列処理を実装できます。

 

実行結果

 

まとめ

基本的に非同期処理を行う場合は、Promiseを使うのが便利ですね!

次は、apiを叩く際にrequestモジュールを使うと思うのですが、axiosというモジュールが

request + promiseの機能を備えていて、非常に便利なのでその使い方記事を書いていきます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA