私はJavaScriptが初めてで、エラーをどのように処理すればよいのか疑問に思っています。より正確には、いつ例外、戻り値、コールバック、またはプロミスを使用する必要がありますか? 私は現在、同期関数の戻り値と非同期関数のコールバック/プロミスを使用していますが、例外を使用したことがないため、それが良い選択であるかどうかはわかりません。同期関数は通常のエラー値 (-1 と null) を正しい値として返すことができますが、実際には、-1 と null の両方が関数の正しい結果になることは非常にまれです。誰かが正しい解決策を選択する方法を教えてくれますか?
1 に答える
戻り値の問題は、選択できる値がないことではなく、それらを手動でチェックしてスタックに伝達する必要があるという事実です。
例外によってエラーが発生し、try-catch がどこにもない場合、プロセスがクラッシュし、適切なスタック トレースが表示されます。エラーは、コードのバグ (通常は TypeError と ReferenceError) か、ファイルが存在しないなどの予想される発生のいずれかです。後者の場合、try-catch を追加して、存在しないファイルを処理する必要があります。前者の場合、try-catch を追加せず、代わりにバグを修正する必要があります。
一方、誤った戻り値をチェックするのを忘れた場合、プログラムはおそらく暗黙のうちに未定義の状態で続行するか、クラッシュよりも悪い結果になります。バグは通常、何かを忘れることによって引き起こされるという事実もあるため、戻り値をどこでも明示的にチェックする必要があるのは良くありません。
もう 1 つの問題は、戻り値を確認したとしても、その時点でそれを処理する方法がわからない可能性があるため、手動でさらに伝播する必要があるため、やはり手動のコードが必要になることです。try-catch を使用すると、今のところ try catch は必要ありません。エラーを処理できるスタックのさらに下にある可能性があります (UI に「問題が発生しました」というメッセージを表示するなど)。
非同期コードでエラーを処理する場合は、promise を使用する必要があります。最小限の promise 実装はこれにはまだ使用できませんが、コールバックを使用したエラー処理非同期コードよりもまだ何光年も先を行っています。これはばかげており、手動のチェックと伝播が必要なだけでなく、同期と非同期の 2 つの異なるエラー処理チャネルが必要です。promiseとは何ですか? なぜ使用する必要があるのですか? を参照してください。(免責事項:私は著者です)