10

仕様でカバーされていないpromise ライブラリの側面は? 実装間でどのような違いがありますか?

実際の違いの例を示してください (Bluebird と Q など)。

4

1 に答える 1

12

ほとんど全部。Promises/A+ 仕様は、promise の相互運用性を目的としており、promise ライブラリ (および現在はネイティブの promise) が互いに通信できるように構築されています。promise がどのように動作するかを予測し、promise が他のライブラリによってどのように同化されるかを定義できるようにするためのアイデアです。

仕様の引用:

この仕様は、メソッドの動作を詳述し、thenすべての Promises/A+ 準拠の promise 実装が提供するために依存できる相互運用可能なベースを提供します。そのため、仕様は非常に安定していると考えるべきです。Promises/A+ 組織は、新たに発見されたコーナー ケースに対処するために下位互換性のあるマイナーな変更を加えてこの仕様を改訂することがありますが、慎重な検討、議論、およびテストの後にのみ、大規模または下位互換性のないものを統合します。最後に、中核となる Promises/A+ 仕様は、promise の作成、履行、または拒否の方法を扱っておらず、代わりに相互運用可能な then メソッドの提供に焦点を当てることを選択しています。コンパニオン仕様の将来の作業では、これらの主題に触れる可能性があります。

以下は対象外です。

  • promise の作成 (これがpromise コンストラクターの仕様です)。
  • Promise 集約 (ただし、ほとんどの実装は をサポートしてい.allます)。
  • プログレッション (これはプログレッション スペックであり、すぐに置き換えられます)。
  • キャンセル (キャンセル仕様です)。
  • 未処理の拒否監視 (仕様はありませんが、検査の議論があります)。
  • スタック トレース。

たとえば、Bluebird と Q はどちらも完全に Promises/A+ の苦情ですが、これらの多くで異なります。

  • 次の Q、v2 では見積もりが導入されます。Bluebird は、C# の IProgress のようなものを支持して、最終的にプログレッションを廃止する予定です。
  • Promise の作成は通常、Q では deferred を使用して行われますが (現在は promise コンストラクターのバリアントが提供されています)、Bluebird は promise コンストラクターを推奨しています。
  • Bluebird には、より堅牢で強力なプロミス機能があり、1 つのコマンドでコールバック API 全体をプロミスに変換します。Q の作者である Kris は、ファイルシステムと http モジュールを手動で約束する Q-IO を構築しました。
  • Bluebird では、 、および promise 配列メソッド ( 、など)をthis介した値のスコープ バインドが可能です。.bind.map.reduce.filter
  • Q には非同期キューのようなプリミティブがあり、Q 接続を介した RPC を念頭に置いています。
  • Bluebird は約 100 倍高速で、スタック トレースが改善され、未処理の拒否の自動検出が行われます。また、promise ごとに消費する RAM メモリも大幅に削減されます。

ここに別の参照があります

于 2014-05-01T08:00:40.903 に答える