[解決済み] プロミスキャッチの再投入エラー
2022-10-20 18:06:26
質問
チュートリアルで次のようなコードを見つけました。
promise.then(function(result){
//some code
}).catch(function(error) {
throw(error);
});
私は少し混乱しています。catch呼び出しは何かを達成するのでしょうか?単にキャッチされたのと同じエラーを投げるだけなので、何の効果もないように思えます。私はこれを、通常の try/catch がどのように動作するかに基づいています。
どのように解決するのですか?
あなたが示すように、裸のキャッチ&スローに意味はありません。 コードを追加して実行を遅くする以外、何の役にも立ちません。 ですから、もしあなたが
.catch()
で再スローするのであれば、何かやりたいことがあるはずです。
.catch()
でやりたいことがあるはずで、そうでなければ
.catch()
を完全に削除してください。
その一般的な構造の通常のポイントは、何かを実行したいときに
.catch()
で何かを実行したいときです。例えば、エラーを記録したり、状態をクリーンアップしたり(ファイルを閉じたり)しますが、プロミスチェーンは拒否されたまま継続させたいときです。
promise.then(function(result){
//some code
}).catch(function(error) {
// log and rethrow
console.log(error);
throw error;
});
チュートリアルでは、エラーをキャッチできる場所を示すため、あるいはエラーを処理してから投げ直すという概念を教えるためだけに存在することがあります。
キャッチと再スローの有用な理由のいくつかは次のとおりです。
- 次のことをしたい エラーを記録する を記録し、プロミス・チェーンは拒否されたままにしておきたい。
- あなたは エラーを他のエラーに変える に変えたい (多くの場合、連鎖の末端でのエラー処理を容易にするため)。 この場合、別のエラーを再投与することになります。
- あなたは プロミス・チェーンが続く前に多くの処理を行いたい。 (リソースのクローズや解放など) を行いたいが、プロミス・チェーンは拒否されたままにしておきたい。
- あなたは デバッガのためにブレークポイントを置く場所。 が必要です。
- あなたは 特定のエラーまたはエラーのセットを処理したい を処理し、他のエラーは呼び出し元に伝搬するように再スローしたい。
しかし、キャッチハンドラ内に他のコードがない、同じエラーのプレーンなキャッチと再スローは、コードの正常な実行に役立つことは何もありません。
関連
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] REST APIからデータを取得しようとしたときに、要求されたリソースに'Access-Control-Allow-Origin'ヘッダーが存在しない。
-
[解決済み] 明示的なプロミス構築のアンチパターンとそれを回避する方法とは?
-
[解決済み] JavaScriptのセミコロン自動挿入(ASI)のルールとは?
-
[解決済み] .then()チェーンで以前のプロミス結果にアクセスするにはどうすればよいですか?
-
[解決済み] try {} without catch {} はJavaScriptで可能ですか?
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】JavaScriptのプロミス - reject vs. throw
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ