ホームページ  >  に質問  >  本文

then(onFulfilled, unknown) - then(unknown, onRejected) - なぜ catch() は返された Promise を履行するのでしょうか?

このコードを試しています:

リーリー

ふと気づいたとき:

Promisewith999fulfilled したがって、 catch() メソッドは実行されません < /strong> ただし、 catch() によって返される Promise (この場合は returnCatch) は最終的に fulfilled となり、値は >with999.

と同じになります。

それでは、私の質問は、なぜ catch() returnCatch の約束を 果たすことになるのでしょうか?

returnCatch ハングすることを期待していました (catch() が実行されなかったため) then() を使用しても何も起こりません。 < /code>「反対のことをする」場合にも同じことが起こります。

then()

約束を 拒否する: リーリー

誰か何が起こっているのか説明してもらえますか?

P粉446800329P粉446800329187日前361

全員に返信(2)返信します

  • P粉111627787

    P粉1116277872024-03-31 11:54:44

    このコードは、最初の Promise に .then と .catch を連鎖させるのと同じです。これは当てはまりません。catch の新しい変数を作成するには、それを拒否してから次の変数にパイプする必要があります。

    これは、複数の変数を使用せずに同じステートメントを一度に記述することと考えてください。そのような動作はより理にかなっています。 Promise が解決されると、最初の .then が実行され、Promise が拒否された場合は、それらの順序や宣言、またはこれを行うために使用する変数の数に関係なく、最初の .catch が実行されます。

    ###編集: このコード スニペットは上記のものと同じであり、同じ Promise を渡します。

    リーリー

    返事
    0
  • P粉464082061

    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
  • キャンセル返事