Awesome Promises
Promisesを扱う資料や関連プロジェクトをまとめたAwesomeリストです。
リソース、ブログ、書籍
初心者向け
- Promise Cookbook - なぜ、何を、どのように。「主にフロントエンド開発者へ向けた短い導入」。
- Promises for Asynchronous Programming - Exploring ES6の章。
- You Don’t Know JS: Promises - You Don’t Know JS: Async & Performanceの章。
- JavaScript Promises: an Introduction - JavaScriptネイティブPromise実装の基礎。
- JavaScript with Promises - O’Reilly刊。短く要点を押さえ、ネイティブとbluebirdを使います。
- Promise it won’t hurt - 対話的なnodeschoolワークショップ。
- ES6 Kata Promises - Promise Kata: Basics。
- ES6 Promises in Depth
- An Incremental Tutorial on Promises - 初心者向けFAQ形式チュートリアル。
詳細解説
- Promise Fun - @sindresorhusによるメモ、パターン、一般的なPromise問題の解決策。
- You’re Missing the Point of Promises - Promiseはコールバック集約以上のもので、jQueryの実装(3.0以前)だけでは不十分です。
- We have a problem with promises - 「多くの人はPromiseを本当に理解せずに使っている」。
- Promise anti-patterns - よくある誤用と避け方。
- Promise anti-patterns (2) - もう一組のPromiseアンチパターン。
- Promise Ponderings, (Anti-)Patterns, and Apologies - よくある質問と回答で示し説明するPromiseの振る舞い。
- Javascript Promises…In Wicked Detail - Promise実装を再現。
- Writing Promise-Using Specifications - 「Promiseを作成、受理、操作する仕様の書き方を案内する文書」。
- Async functions - making promises friendly
リファレンス
- Promises/A+ specification
- caniuse promises
- Fates and States - 可能な状態の簡潔な定義。
- Promisees - 冒険好きのためのPromise可視化プレイグラウンド。
Promises/A+実装(ES6/ES2015互換)
厳密な実装
これらはes6仕様を過不足なく実装します。優れたpolyfillであり、ネイティブPromiseと非常に高い互換性があります。
- pinkie - Ponyfill。Node指向ですがbrowserify可能。非常に小さな実装。
- native-promise-only - Polyfill。ブラウザー・node互換。
- es6-promise - オプトインpolyfill。rsvp.jsの厳密仕様サブセット。
- lie - 小型でbrowserify可能、オプトインpolyfillを備えます。
追加機能を持つ実装
これらは言語仕様より多くの機能を提供しながら互換性を保ちます。すべてNodeとブラウザーに対応します。
- bluebird - 完全機能で非常に高性能。長いスタックトレースとジェネレーター/コルーチンサポート。
- creed - Bluebirdのように高性能・フル機能ですがFP指向。コルーチン、ジェネレーター、Promise、ES2015 iterable、fantasy-land仕様を備えます。
- rsvp.js - 少数の追加機能を持つ軽量実装。IE6まで互換。
- Q - 最初期の実装の一つ。長いスタックトレースなどを提供。
- then/promise -
nodeify、denodify、done()を追加した小さな実装。 - when.js - 制御フロー、関数型、ユーティリティメソッドを豊富に備えます。
フォールバック
- native-or-bluebird - 完全ネイティブ実装への移行を助けます。
- pinkie-promise - ネイティブを使うか、
pinkieへフォールバック。nodeライブラリ作者に最適。 - any-promise - 最初に利用可能な実装を読み込みます。browserifyで安全。
便利なユーティリティ
ネイティブで厳密な仕様準拠のPromiseは、互換性、将来性、ライブラリ作者、ブラウザーのために優れています。しかしbluebirdのようなライブラリは、Promiseコンストラクターとプロトタイプに便利な機能を追加します。解決策は小さなモジュールです。
sindresorhusの多数のPromiseユーティリティ(メモを見る)
- delay - 指定時間だけPromiseを遅延。
- pify - コールバック形式の関数をPromise化(「denodify」)。
- loud-rejection - 未処理Promise拒否を既定の静かな失敗でなく大きく失敗させる。
- hard-rejection - 未処理Promise拒否を既定の静かな失敗でなく直ちに厳しく失敗させる。
- p-queue - 並行制御を持つPromiseキュー。
- p-break - Promiseチェーンから抜ける。
- p-lazy -
.then()または.catch()が呼ばれるまで実行を遅延するlazy Promiseを作成。 - p-defer - deferred Promiseを作成。
- p-if - 条件付きPromiseチェーン。
- p-tap - 値・状態へ影響せずPromiseチェーンへ介入。
- p-map - Promiseを並行してmap。
- p-all - Promiseを返す関数とasync関数を、任意の制限付き並行度で並行実行。
- p-limit - Promiseを返す関数とasync関数を制限付き並行度で複数実行。
- p-times - Promiseを返す関数とasync関数を指定回数、並行実行。
- p-catch-if - 条件付きPromise catchハンドラー。
- p-time - Promiseが解決に要する時間を測定。
- p-log - Promiseの値・エラーをログ出力。
- p-filter - Promiseを並行フィルター。
- p-settle - Promiseを並行してsettleし、完了値または拒否理由を得る。
- p-memoize - Promiseを返す関数とasync関数をメモ化。
- p-whilst - 条件がtrueを返す間、関数を反復呼出ししてからPromiseを解決。
- p-throttle - Promiseを返す関数とasync関数をスロットル。
- p-debounce - Promiseを返す関数とasync関数をデバウンス。
- p-retry - Promiseを返す関数またはasync関数を再試行。
- p-wait-for - 条件がtrueになるまで待機。
- p-timeout - 指定時間後にPromiseをタイムアウト。
- p-race - より良い
Promise.race()。 - p-try -
Promise#try()ponyfill。Promiseチェーンを開始。 - p-finally -
Promise#finally()ponyfill。結果にかかわらずPromiseのsettle時に呼出し。 - p-any - いずれかのPromiseがfulfilledになるまで待機。
- p-some - 指定数のPromiseがfulfilledになるまで待機。
- p-pipe - Promiseを返す関数とasync関数を再利用可能なパイプラインへ合成。
- p-each-series - Promiseを直列に反復。
- p-map-series - Promiseを直列にmap。
- p-reduce - Promiseを使って値のリストを一つの値のPromiseへreduce。
- p-props -
Promise.all()に似ていますがMapとObject向け。
その他
- promise-method - 単独の
bluebird.method。同期戻り値メソッドをPromiseを返すメソッドへ変換。 - is-promise - 何かがPromiseらしいかを判定。
- sprom - ストリーム終了時に解決。任意のバッファリング(注意してください)。
- task.js - Promiseとジェネレーターを使い、ブロッキング風のスタイルでasync関数を記述。
bluebird.coroutineに似ています。 - co -
task.jsとbluebird.coroutineに似ていますが、thunkもサポート。 - lie-fs - NodeのFS API向けPromiseラッパー。
- promise-do-until - 条件がtrueを返すまで関数を反復呼出ししてからPromiseを解決。
- promise-do-whilst - 条件がtrueを返す間、関数を反復呼出ししてからPromiseを解決。
- promise-semaphore - 実行する作業セットを構成可能な直列方式でpush。
- promise-nodeify - 解決または拒否時にNodeスタイルのコールバックを呼ぶ単独の
nodeifyメソッド。
ライセンス
Creative Commons CC0 Licenseの下でライセンスされています。