it-swarm.com.de

Fehlerbehandlung in AngularJS http holen dann konstruieren

Wie kann ich mit einem HTTP-Fehler umgehen, z. 500, bei Verwendung des AngularJS "http get then" -Konstrukt (Versprechen)?

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

Das Problem ist, dass für alle nicht 200 HTTP-Antworten die innere Funktion nicht aufgerufen wird.

65
Federico Elles

Sie müssen einen zusätzlichen Parameter hinzufügen:

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

Sie können dieses bisschen sauberer machen, indem Sie Folgendes verwenden:

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

Ähnlich wie bei @ this.lau_ antworte, andere Herangehensweise.

54
Ravish

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

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

Ersetzen Sie successCallback und errorCallback durch Ihre Funktionen.

Bearbeiten: Laurents Antwort ist korrekter, wenn man bedenkt, dass er then verwendet. Dennoch lasse ich dies hier als Alternative für die Leute, die diese Frage besuchen werden.

13
Umur Kontacı

Wenn Sie Serverfehler global behandeln möchten, möchten Sie möglicherweise einen Interceptor-Service für $ httpProvider registrieren:

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

Text & Tabellen : http://docs.angularjs.org/api/ng.$http

3

Versuche dies

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

Damit konnte ich nicht wirklich arbeiten. Das könnte also jemandem helfen.

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

Siehe auch $http response Parameter .

0
serv-inc