このコードを試しています:
リーリー
ふと気づいたとき:
Promisewith999
fulfilled したがって、 catch()
メソッドは実行されません < /strong> ただし、 catch()
によって返される Promise (この場合は returnCatch
) は最終的に fulfilled となり、値は >with999
.
それでは、私の質問は、なぜ catch()
は returnCatch の約束を
果たすことになるのでしょうか?
returnCatch が
ハングすることを期待していました (catch() が実行されなかったため) then()
を使用しても何も起こりません。
< /code>「反対のことをする」場合にも同じことが起こります。
then() 約束を
拒否する:
リーリー
誰か何が起こっているのか説明してもらえますか?
P粉446800329343日前657
全員に返信(2)返信します

P粉1116277872024-03-31 11:54:44
このコードは、最初の Promise に .then と .catch を連鎖させるのと同じです。これは当てはまりません。catch の新しい変数を作成するには、それを拒否してから次の変数にパイプする必要があります。
これは、複数の変数を使用せずに同じステートメントを一度に記述することと考えてください。そのような動作はより理にかなっています。 Promise が解決されると、最初の .then が実行され、Promise が拒否された場合は、それらの順序や宣言、またはこれを行うために使用する変数の数に関係なく、最初の .catch が実行されます。
###編集:
このコード スニペットは上記のものと同じであり、同じ Promise を渡します。
リーリー
返事0

P粉4640820612024-03-31 10:54:30
「なぜ」という質問に答えるのはいつも難しいですが、基本的にはこれに要約されます。「それが機能するから」です。
これは、フルフィルメント結果を渡す catch()
の動作からは明らかではないかもしれませんが、拒否について渡す .then()
の 2 番目の例を見てください。 プロミス チェーンの初期で発生するエラーを処理するために、 に .catch()
コールバックを実行させたい。エラーが発生して .then()
コールバックが実行されないために、Promise チェーンが途中で停止する (Promise が保留状態のままになる) ことは望ましくありません。
この動作は、.then(handleResult)
と .catch(handleError)
の間で対称であることがわかりました。ただし、これらは実際には .then(handleResult, null)
および .then(null, handleError)
の単純化された構文であることに注意してください。 then
メソッド は実際には 2 つのパラメータを受け取ります。1 つは履行を処理するパラメータ、もう 1 つは拒否を処理するパラメータです。両方の試験に同時に合格することができます (そして通常はそうすべきです)。
.then() 返された Promise は、対応するハンドラーの結果に基づいて解決されます (呼び出しが例外をスローした場合は拒否されます)。Promise チェーンの背後にある考え方は、最初は常に
であるということです。コミットメントは、コミットメントが解決されて初めて解決されました。対応するコールバックが提供されていない場合、デフォルトでは、.then(null, null)、
.then(null, handleError) が Promise を満たしたか、# されたかどうかの結果のみが渡されます。拒否された Promise に対する ##.then(handleResult, null)
。
返事0
キャンセル