【Node.js】非同期処理をasyncからPromise(bluebird)に乗り換えるか
ES6から非同期処理の仕組みが強化されたので調査したときの覚書。
今まではasync.jsを使っていた。全く問題なかったけど、速度的には遅い方らしい。
目次
- Promise
- Generator
- 今後どう書いていくか
まずはES6で標準入りしたPromiseとGeneratorを理解するところから。
1.Promise
下記サイトが分かりやすい。
Promiseは非同期処理を抽象化したオブジェクトとそれを操作する仕組みの事をいいます。
今までコールバックしていたのをPromiseを通して操作すると一貫した書き方が出来るようになる。
Promiseをラッピングして使いやすくしているライブラリがbluebird。
よく使うasync.parallel()はPromise.all()で置き換えることが出来る。
2.Generator
処理を任意の時点で止めて再開できるフロー制御の仕組み。
「function*」でGeneratorであることを宣言。「yield」キーワードで止める箇所を指定。
非同期関数をyieldで宣言して、順次実行するのに便利。
Generatorを利用したフロー制御のライブラリがco。
サンプルプログラムとかは下記記事を参考に。
3.今後どう書いていくか
個人的にGeneratorの「function*」「yield」という見慣れないキーワードを書くのに抵抗があるので、Promise中心でいく予定。
既に試してみた方の記事もあるので参考に。
< 2015/08/21 Modified >
Promiseで並列処理するときにタスクごとPromiseオブジェクトを返さないといけない。
これが今までの設計思想に多大なインパクトを与えるので、もうちょいasync.jsを使い続けることにした。
テヘペロ
< Related Posts >