追記: ジェネレーターの勉強してる時、tj/node-thunkify を見つけたけど、当然ながら、こっちの方がよっぽど洗練されててまともな実装です。thunkify を激しくお勧めしておきます。余裕できたら、thunkify に寄せてみたい。
世間では MSIE 8,9,10 の終焉 で賑わっていますが、最近まで MSIE 6 相当の IEMobile や BlackBerry OS 5 向けの対応などをやっていまして、Promise には大変お世話になりました。
FRP をガリガリやりたいなーと思う反面、どうしても旧世代端末のハナシが出た時は Promise は手堅いので、一段落したところで、モジュール化して npm に登録してみました。
主に以前書いた上記記事を汎用化したモノで、Promisr と命名しました:
- promisr (npm)
- japboy/promisr (GitHub)
tl;dr
プロミス処理のラッパーをつくる。 - Qiita で書いた promisify
という関数で、jQuery の Deferred オブジェクトをコードのあちこちに書き散らかす状態を脱しました。モジュール化に当たっては、jQuery Deferred だろうが Q だろうが ES2015 の Promise だろうが、同じ promisify
関数を元に、Promise の実装をできるようにしました。
var promisr = new Promisr(window.Promise || window.Q || window.jQuery);
var done = promisr.promisify(function (resolve, reject, value) {
if (value) return resolve(value);
reject(value);
});
基本は上記の通りです。Promisr
をインスタンス化する時の引数に Promise
, Q
, jQuery
のどれかを渡す事で、指定のライブラリを元に promisify
関数をつくります。
あとはこの promisify
の実装を元に、自分がよく使う Promise 処理のショートハンドをメソッドで生やしています。
詳しくは雑な API ドキュメントに列挙しています:
Node.js で使う場合は;
npm install --save promisr
var Promisr = require('promisr');
ブラウザで使う場合は;
<script src="https://npmcdn.com/promisr@0.3.1/dist/promisr.min.js"></script>
var Promisr = window.Promisr;
みたいな感じで呼び出せます。
これで Promise 必要になった時に、古いソースコード漁らなくてよくなりました! うれしい。
心置きなく FRP の勉強に移行できそう。