2012-06-13 8 views
5

プログラマーは、エラーについて非同期に通知される仕方に分かれているようです。エラーバックを使用する利点は何ですか?

プログラマーの中には、値と誤っていないかどうかを示すブール値の2つの引数を持つコールバックを使用する方が好きかもしれません。それはtry catchの文のように見えるという点でこれは利点があります。

asyncFunct(function (value, noError) { 
    if (noError) { 
     // success, do something with value 
    } else { 
     // value is the error which is thrown 
    } 
}); 

その他(すなわち、ブール値が誤っているかどうかを伝える必要があります)、負のを好みます。

asyncFunction(function (value, isErroneous) { 
    if (!isErrorneous) { 
     // success, do something with value 
    } else { 
     // value is the error which is thrown 
    } 
}); 

asyncFunction(function (value) { 
    // success, do something with value 
}); 

はその後、非同期機能とerrbacksを正常に実行するために別々のコールバックを提案している人がいる。彼らの推論を使用すると、非同期関数がエラーをスローしないことを知っていれば、以下のように、あなたが安全に二番目のパラメータを省略することができるということです非同期関数の誤った実行これは彼が、コールバック、errbacks、両方またはnoneを処理したい場合は、プログラマが選択することができます:

asyncFunction(function (value) { 
    // success, do something with value 
}, function (error) { 
    // handle the error 
}); 

asyncFunction(function (value) { 
    // success, do something with value 
}); 

asyncFunction(null, function (error) { 
    // handle the error 
}); 

私はどのあなたが好む方法を求めていませんよ。私は単に各メソッドの長所と短所を尋ねているので、どのメソッドを使うべきかを知っています。

+1

実際のメリットとデメリットはありません。それは単なるスタイルの問題です、イホ。 – freakish

+3

もう一つの方法がありますが、これははるかに強力なIMOです:[遅延オブジェクト](http://blogs.msdn.com/b/ie/archive/2011/09/11/asynchronous-programming-in-javascript-with- promises.aspx)。 –

+1

私は遅延オブジェクトも好んでいます。しかし、あなたが選んだどのような方法でもアプリ全体で一貫して使用することができますが、_best_アプローチを選択するよりも一貫性が重要になることがよくあります。 – msanders

答えて

1

デザイン決定:

これは単なる設計上の決定、より多くの何もないです。スタンドアロンのパラメータであれば、スタンドアロンの機能を持たせ、「もっと美しい」コードを作成することができます(誰かにとっては、より面倒な人にとっては本当に主観的です)。

エラー複雑:一部のアプリケーションでは

あなたは(filesystem.fileRead FILE_DONT_EXISTSを持つことができ、FILE_LOCKED、NOT_PERMISSIONS ...)といくつかのアプリに必要なだけのエラー(db.checkConnectionまたはdb.openConnectionを)投げるより複雑なエラーを持つことができます。

注文と違い:

偉大なAPIのための非常に良いサンプルがアマゾンからのもので、あなたがそれを確認することができます。 http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

応答:err (Error)function(err, data) { ... }data (Object):あなたは常に2つのパラメータを持っているコールバック関数を、持っているcopyObject(params = {}, callback)のような非同期機能で。エラーは最初のパラメータのように設計されています。エラーが発生した場合、データがないためです。だからそれは本当に優先順位と注文についてです。

// request 

getObject({ 
    param1 : something, 
    param2 : something, 
    param3 : something 
}, callback); 

// response 

function callback(error, response){ 
    if error throw err; 
    // now deal with responsei 
} 

あなたが見ることができるように、あなたは、両方の混合二つの方法があります。要求では、オブジェクトと関数を渡し、応答でエラーとオブジェクトを取得します(その要求関数に)。

関連する問題