2016-08-06 5 views
1

したがって、角度のHTTPドキュメントからインターセプタをまっすぐに引き出しましたが、これはまだ動作しません。 "request"と "response"関数は呼び出されますが、 "requestError"や "responseError"関数は呼び出されません。Angular HTTPインターセプタはエラー機能を打ちません

myApp.config(['$httpProvider', function ($httpProvider) { 
     $httpProvider.interceptors.push(function ($q) { 
      return { 
       'request': function (config) { 
        return config; //gets called 
       }, 

       'requestError': function (rejection) { 
        return $q.reject(rejection); //Never gets called 
       }, 

       'response': function (response) { 
        return response; //gets called 
       }, 

       'responseError': function (rejection) { 
        return $q.reject(rejection); //Never gets called 
       } 
      }; 
     }); 
    }]); 

サーバーでは、400を返していますが、実際にはエラーが発生します。ここにサービスがあります

User.publicProfileGetProfile = function (value, type) { 
    return $http({ 
     url: '/public/profile/' + type + '/' + value, 
     method: 'GET' 
    }).then(function (response) { 
     return response; 
    }, function(error){ 
     return error; 
    }); 
}; 

すべての応答関数が呼び出されておらず、すべての応答が応答関数を経由しています。通常のように、標準的な角度誤差がBad Request(400)で表示されます。 400エラーが返されると、インターセプタの 'response'関数を介して単に '未定義'になります。

重要な情報を含めるのを忘れた場合はお知らせください。

答えて

0

returnを使用すると、エラーハンドラはとなり、が成功拒否に変換されます。代わりにthrowを使用して拒否をチェーンします。

User.publicProfileGetProfile = function (value, type) { 
    return $http({ 
     url: '/public/profile/' + type + '/' + value, 
     method: 'GET' 
    }).then(function onSuccess(response) { 
     return response; 
    }, function onReject(error){ 
     //return converts rejection to success 
     //return error; 

     //use throw to chain rejection 
     throw error; 
    }); 
}; 
+0

私はその変更を行いました...しかし、 '応答'機能はまだ呼び出されていますが、コントローラでは、エラー結果はまだ呼び出されません。 – fjaxyu

+1

[this JSFiddle DEMO](https://jsfiddle.net/hawfLnx1/)でステータス400のレスポンスに対して 'errorResponse'インターセプタが呼び出されます。 – georgeawg

+0

ありがとうございました! JSFiddleが正常に動作しているのを見たとき、私はまったく同じように見えました。それがうまくいかないときは、問題を引き起こす可能性のある他のインターセプタがあるかどうかを調べました。私は最初にヒットし、エラーを応答として返す別のインターセプターを持っていました。そして、それを通って成功した応答として処理します。私はそれを削除し、すべてが正しく動作しているようだ! – fjaxyu

0

JSFiddle(@georgeawgから)が正常に動作していることがわかったとき、私はまったく同じように見えました。それがうまくいかないときは、問題を引き起こす可能性のある他のインターセプタがあるかどうかを調べました。私は最初にヒットし、エラーを応答として返す別のインターセプターを持っていました。そして、それを通って成功した応答として処理します。私はそれを削除し、すべてが正しく動作しているようだ!

関連する問題