2016-09-21 14 views
0

私はnodejsを中心に働いています(しかし、私は一般的にjavascriptにはまったく新しいですが)、もっと具体的にはexpressjsです。彼らは明示的にtryとcatchのパターンを使用することを提案しますが、他の人が試して真のエラーを最初にやってみることを勧めています。代わりに広く物事の良い方法と考えられている1は、エラーより先にキャッチパターンを試してみますか?

callback(err, data) { 
    try { 
    //do something 
    } catch(err) { 
    //handle the error 
    } 
} 

すなわち

callback(err, data) { 
if (err) throw err; 
//do something if no error was returned 
} 

? Javascriptは、何かをすることの "真の方法"になると非常にあいまいです。

+3

あなたの第二の例では、本当に意味がありません。 'callback'が呼び出されるまでに、エラーは既に発生しているかどうか、' err'はエラー(もしあれば)、 'null'(そうでなければ)です。これは、ほとんどのNode API呼び出しの非同期性のためです。したがって、コールバックに関するこの標準規約があります。最初のargはエラー(ある場合)、2番目のデータ(存在する場合)です。 (APIが今日設計されている場合、約束を使用し、実際にはブリッジングライブラリがあります) –

+0

V8でキャッチを最適化できません! –

+0

あなたは何かを投げつけます。ここで 'err'が渡されています:エラーは既に起こっています。 –

答えて

3

重要な違いがあります - "エラー優先"アプローチは非同期呼び出しで、try-catchは同期用です。

いくつかの外部ライブラリを使用している場合は、どのようにエラーを処理するかを決定することが必要です。場合によってはオプションがあります(たとえば、ノードの同期モジュールの 'fs'モジュールを見ると、同期関数はエラーをスローします)。

独自の関数を実装している場合は、ノードの非同期性に適合しているからといって、「エラー・ファースト」アプローチがより良く見えます。

(とのtry-catchを使用しないもう一つの理由 - それがなかったかのようにV8オプティマイザは良いとしてこのような構成と機能を最適化していない場合があります)

+0

なぜ非同期でエラーが発生するのはなぜですか?私は、結果またはエラーを返すことができる同期関数を書いています。そのシナリオで最初にエラーを使用しない理由はありますか? – stone

関連する問題