約束を返す角張ったサービスがあれば、この約束の消費者がエラーを処理するかどうかを検出できますか?私はサービスでデフォルトのエラー処理を提供したいが、エラーハンドラが実行チェーンの下で定義されていない場合にだけ使用されるようにする。
サービスメソッドは次のようになります。消費者は、エラーハンドラを提供している場合は、エラーがそれによって独占的に取り扱ってください
1):
function serviceMethod(method, url, data)
{
return $http({
method: method,
url: url,
data: data
})
.then(
function (response) {
return response;
},
function (response) {
console.log('ERROR!'); // default error handling
}
);
}
serviceMethod
戻りますので、約束を、。
$scope.getResponse = function() {
return Services.serviceMethod('put', $scope.url, $scope.someData)
.then(function (response) {
}, function (error) {
// Custom error handling.
});
}
2)コンシューマーがハンドラーを提供しない場合、エラーはサービス・ハンドラーによって排他的に処理される必要があります。
serviceMethod
の最初の後継で達成することは可能ですか?チェーン内のどこでも可能です(エラーはエラーハンドラを提供するために最初のコンシューマによってのみ処理されます)。
エラーを処理するために**。catch **を使用しないでください。私が覚えている限り、通常のチェーンは '$ http(something).then(success).catch(error)'です。とにかく、事柄をより明確にしたい場合は、それぞれのケースからオブジェクトを返すことがあります。エラーの場合は、 '{success:false、error:errovariable}'を返すことがあります。 – briosheje
'catch'は' promise.then(null、errorCallback) 'の短縮形ではありませんか? 私のチェーンは少し長くなり、一般的に '($ http(something).then(successHandler、errorHandler))。then(successHandler、errorHandler)'などのようになります。エラーハンドラはオプションです。 – pSoLT
各HTTPリクエストにはレスポンスがあり、チェーン数に関係なく、単一のキャッチ(エラー)を処理できます。それぞれのレスポンスは成功シナリオとエラーシナリオを提供します。それぞれの単一のケースを手動で処理したい場合は、(上記のように)オブジェクトを返すか、あるいはいくつかのコールバックを定義してサービスハンドラから呼び出すことができます。 – briosheje