Es6の約束がどれほど素晴らしいか、そしてなぜそれらを実装する必要があるかについての数十の記事を読んだ後、私は[〜#〜] all [〜#〜]私の(自明ではない)javascript関数はpromiseである必要があります。
実際、Doomの三角形を避け、明確で簡潔なコードを取得しているように見えるので、それらを使用してコードを作成するときはとても気分がいいです。 (これにより、実行に関する推論がはるかに簡単になります)。
私が見つけられなかったのは、いつ[〜#〜] not [〜#〜]promiseを使用するのですか?いつ使用を避けるのですか?
更新:
APIの一貫性のようないくつかの素晴らしい点を見てきましたが、確かなNOケースはまだ見つかりません。 Luxの回答は、繰り返し発生するコールバックはpromiseと互換性がないため、イベントエミッターをフェッチする操作はそれらを回避する必要があることを示唆しています。しかし、今のところ(正しいように)それをチェックするための答えはまだ実質的に不足しているように感じます。
いくつかの経験則:
メソッドを同期(単純なデータ変換)できる場合は、そのメソッドで同期コードを使用します。
ただし、メソッドが同期時々、非同期時々(内部または外部の状態に基づく複数のコードパス)である場合は、非同期である常に。そうしないと、複雑なシナリオでのコードの動作に予期しない微妙な不一致が発生する可能性があるため、2つの態度を混同しないようにすることをお勧めします。
[編集]コメントで述べたように、あなたのメソッドが今のところ同期しているが、将来のある時点で非同期作業を行う必要があるかもしれないと強く信じている場合、コストのかかるリファクタリングを避けるために最初からpromiseを使用することをお勧めします。
一般に、APIは一貫している必要があるため、どこでもpromiseを使用するか、どこでもコールバックを使用するのが最善です。これにより、コードについての推論が容易になります。
超高性能コードを記述している場合やメモリフットプリントを低くする必要がある場合は、promiseではなくコールバックを使用するか、ネイティブの代わりに bluebird などのパフォーマンスに重点を置いたpromiseライブラリを使用することを検討してください。 Promiseの実装/一般的なユースケースのポリフィル。
[編集]とにかく、グローバル fetch 関数のようなWebプラットフォームへの新しい追加は、Promise
を返します。今後、ますます多くのブラウザ組み込みが登場するようです。約束に基づいて動作します。したがって、最新のコードを記述したいのであれば、約束を逃れることはできません。
ワンショット非同期操作にはpromiseを使用します。操作を開始し、操作を実行し、呼び出し元に完了または結果またはエラーを通知してから、永久に実行します。
promiseを使用しない状況は、上記とは異なる状況です。
ウェルプロミスには1つのユースケースがあります。1回だけ来る非同期結果です。
結果を同期して返すことができ、イベントが複数回発生する可能性があるため、イベントのコールバックが必要な場合は、Promisesを使用しません。
コードをブラウザ(Promisesが組み込まれていない可能性があります)で実行し、サイズ[〜#〜]本当に[〜#〜]が重要な場合は、Promisesを使用しないことを決定できます。 Promiseシム/ライブラリを使用する余裕はありません。
ほとんどの場合、promiseは、さまざまなタスクを簡単に処理することに慣れています。スレッドの過負荷を回避するために、意図的に非同期にするためにいくつかのことを行うことがあります。タブごとに1つのスレッドしかありません。小さいものやWebWorkerで作成できるものの場合はpromiseを使用する必要はありません。