まず、bluebird と co はそのような比較対象ではありません。Bluebird.coroutine
vs co
(コルーチンの略)という意味です。
Bluebird.coroutine
ここで、との違いはco
、co
特定のハードコーディングされた型のセットのみを生成できることです。は任意の型の生成をBluebird.coroutine
サポートするように構成できますが、たとえばドキュメントには、サンクとコールバックを生成するためのサポートを追加する方法の例が含まれています。
非同期ジェネレーターは非常に単純であるため、実装間の唯一の違いは、生成できる型とその実行方法です。良くも悪くもなる余地はあまりありません。
ただしbluebird.coroutine
、これは bluebird の機能のほんの一部です。
ジェネレーターは、一連のアクションを冗長にするという問題のみを解決します。リソース管理、同時実行調整、エラー処理、キャンセル + タイムアウト、長いスタック トレースなど、より高度なニーズに対応する便利な機能がたくさんあります。これは、サンク/コールバック/最小限のプロミスによって強化された非同期ジェネレーターしかない場合は不可能または非常に苦痛です。
co
共同サポートがサポートするすべての利回りタイプを構成してから、次を使用するだけで、 のドロップイン置換を行うことができbluebird.coroutine
ます。
var co = require("bluebird").coroutine;
// Configure all yield types you need using co.addYieldHandler
// See documentation for examples
module.exports = co;
ただし、リクエスト ハンドラで実際に直接実行する必要があるコードはほとんどないため、これは実際には意味がありません。ただし、リクエスト ハンドラが呼び出す関数は実行されます。そして、これらの関数は koa によって助けられないので (うーん、koa のポイントは何ですか? :D)、直接 bluebird コルーチンにすることができます。