19

いつ約束を拒否する必要があるかを考えています。このトピックに関するいくつかの質問を見つけましたが、適切な回答が見つかりませんでした。 いつ約束を拒否する必要がありますか?

この記事 http://howtonode.org/6666a4b74d7434144cff717c828be2c3953d46e7/promises は次のように述べています。

  • 解決: 成功した Promise は「解決」され、待機中の成功リスナーを呼び出し、接続されている将来の成功リスナーのために解決された値を記憶します。解像度は戻り値に相関します。
  • Reject: エラー条件が発生すると、Promise が「拒否」され、待機中のエラー リスナーが呼び出され、接続されている将来のエラー リスナーのために拒否された値が記憶されます。拒否は、スローされた例外に関連しています。

これは原則的なガイドラインですか?例外が発生した場合にのみ約束を拒否するということですか?

しかし、次のような関数の場合

findUserByEmail()

結果を検証せずにチェーンを続行できるように、関数がユーザーを返すことを期待します

findUserByEmail()
    .then(sendWelcomeBackEmail)
    .then(doSomeNiceStuff)
    .then(etc..)

ベスト/一般的なプラクティスは何ですか?

4

2 に答える 2

5

私はあなたがどこから来たのか知っています。Q と Q のドキュメントを見ると、遅延/約束の拒否はすべて例外処理に関するものであると簡単に信じてしまう可能性があります。

これは必ずしもそうではありません。

アプリケーションが必要とする理由に関係なく、据え置き型は拒否される可能性があります。

deferred/promise はすべて、非同期プロセスからの応答の処理に関するものであり、すべての非同期プロセスはさまざまな結果をもたらす可能性があります。その一部は「成功」であり、一部は「失敗」です。何らかの理由で、結果が名目上成功したか失敗したかに関係なく、javascript または非同期プロセスで例外がスローされたことがなくても、遅延を拒否することを選択できます。

また、非同期プロセスにタイムアウトを実装することもできます。その場合、応答 (成功または失敗) を受信せずに遅延プロセスを拒否することを選択できます。実際、タイムアウトの場合、これは通常行うことを選択するものです。

于 2013-06-25T11:04:23.977 に答える