ユーザーに値を要求するモーダルを生成するためのAPIがあり、そのモーダルを作成する呼び出しが、指定された値に解決するか、モーダルが閉じられた/キャンセルされた場合に拒否するプロミスを返します。例:
prompt("Enter a value.").then(val => { }).catch(() => { /* closed */ });
閉じたモーダルの拒否された約束を処理するために私が見た提案されたパターンは、
catch
を追加することです上記のような「操作なし」ラムダを持つステートメント。これの問題は、モーダルのときにPromiseチェーンを構築したい場合は 成功すると、後続のロジックのエラーも「操作なし」ラムダのためにサイレントに失敗します。
prompt("Enter a value.")
.then(val => { /* logic that could throw an error */ })
.then(() => { /* method that may return another promise */ })
.catch(() => { }) // Silent fail
.then(() => { /* logic after modal */ })
明らかな解決策は、
then
を移動することです「操作なし」の後のステートメントをキャッチし、新しいステートメントでキャッチしますが、これらのブロックはモーダルが成功した場合にのみ実行する必要があるため、上記の
catch
の後に移動できないことに注意してくださいステートメント。
あなたならどうしますか?
私も最近似たようなものを実装し、私のアプローチはモーダルが
undefined
を返すことでした クローズまたはキャンセルされた場合。catch()
を予約しようとしています 「true」エラーの場合。ただし、
throw
できることも覚えておいてくださいError
だけでなく、何でも s。したがって、代わりに、throw
することができます モーダルが閉じられたことを認識でき、その場合は何もしません。それ以外の場合は、例外の処理に進みます。