web-dev-qa-db-ja.com

AngularJS http get then構造のエラー処理

HTTPエラーを処理するにはどうすればよいですか(例: 500、AngularJS「http get then」コンストラクトを使用する場合(約束)?

$http.get(url).then(
    function(response) {
        console.log('get',response)
    }
)

問題は、200以外のHTTP応答の場合、内部関数が呼び出されないことです。

65
Federico Elles

追加のパラメーターを追加する必要があります。

$http.get(url).then(
    function(response) {
        console.log('get',response)
    },
    function(data) {
        // Handle error here
    })
140
laurent

以下を使用して、このビットをよりクリーンにすることができます。

$http.get(url)
    .then(function (response) {
        console.log('get',response)
    })
    .catch(function (data) {
        // Handle error here
    });

@ this.lau_ answerと同様、異なるアプローチ。

54
Ravish

http://docs.angularjs.org/api/ng.$http

$http.get(url).success(successCallback).error(errorCallback);

SuccessCallbackおよびerrorCallbackを関数に置き換えます。

編集:ローランの答えは、彼がthenを使用していることを考えると、より正確です。しかし、私はこの質問を訪れる人々のための代替としてこれをここに残しています。

13
Umur Kontacı

サーバーエラーをグローバルに処理する場合、$ httpProviderのインターセプターサービスを登録することができます。

$httpProvider.interceptors.Push(function ($q) {
    return {
        'responseError': function (rejection) {
            // do something on error
            if (canRecover(rejection)) {
                return responseOrNewPromise
            }
            return $q.reject(rejection);
        }
    };
});

ドキュメントhttp://docs.angularjs.org/api/ng.$http

3

これを試して

function sendRequest(method, url, payload, done){

        var datatype = (method === "JSONP")? "jsonp" : "json";
        $http({
                method: method,
                url: url,
                dataType: datatype,
                data: payload || {},
                cache: true,
                timeout: 1000 * 60 * 10
        }).then(
            function(res){
                done(null, res.data); // server response
            },
            function(res){
                responseHandler(res, done);
            }
        );

    }
    function responseHandler(res, done){
        switch(res.status){
            default: done(res.status + ": " + res.statusText);
        }
    }
2
Naren Chejara

私は実際に上記で働くことができませんでした。だからこれは誰かを助けるかもしれない。

$http.get(url)
  .then(
    function(response) {
        console.log('get',response)
    }
  ).catch(
    function(response) {
    console.log('return code: ' + response.status);
    }
  )

$http responseパラメーター も参照してください。

0
serv-inc