2016-05-09 4 views
1

Ich bin auf der Suche nach $http Interzeptoren. Und ich sehe dort ist requestError und responseError.HTTP Request Fehler vs Antwort Fehler

1) Was ist der Unterschied zwischen requestError und responseError?
2) In welchem ​​Zustand wird requestError ausgelöst?

Antwort

1

Anfrage Fehler ist ein Fehler, die Kriterien nicht erfüllt haben, fehlende Parameter, die auf einem Server auf eine Ressource zu finden wie header Nutzlast erforderlich ist

Reaktion Fehler fehlt ein Fehler, der durch den Server nach Anforderung gesendet wurde, die war dazu gemacht wie 404 Seite nicht gefunden ist ein Antwortfehler

+0

Btw ist 400 schlechte Anfrage betrachten eine Anfrage Fehler oder Antwort Fehler? – desmondlee

1

Sie einen Blick auf dieses https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

nehmen sollte der Unterschied ist, dass Request bedeutet, dass Ihre Anfrage nicht bearbeitet werden können, haben Sie vielleicht einen Fehler mit der URL oder der Server nicht verfügbar

die responseError In Verbindung mit den http-Statuscodes erreichen Sie den Server, aber möglicherweise ist etwas nicht in Ordnung, z. B. ein Fehler bei einer Anfrage, die Sie beantwortet, aber eine leere Antwort mit dem Code 204 Kein Inhalt

0

Der Hauptunterschied zwischen einem Anforderungsfehler und einem Antwortfehler ist ihre Reihenfolge in der von den Interzeptoren aufgebauten Versprechungskette. Werfen Sie einen Blick auf diese source code

// apply interceptors 
    forEach(reversedInterceptors, function(interceptor) { 
    if (interceptor.request || interceptor.requestError) { 
     chain.unshift(interceptor.request, interceptor.requestError); 
    } 
    if (interceptor.response || interceptor.responseError) { 
     chain.push(interceptor.response, interceptor.responseError); 
    } 
    }); 

    while (chain.length) { 
    var thenFn = chain.shift(); 
    var rejectFn = chain.shift(); 

    promise = promise.then(thenFn, rejectFn); 
    } 

So sehen Sie, dass für Abfangjäger, die alle vier Methoden zur Verfügung stellen, werden Sie ein Versprechen, wie so erhalten:

promise.then(requestFn, requestErrorFn).then(responseFn, responseErrorFn).

Um zu antworten 2. das Versprechen wird von var promise = $q.when(config); erstellt, nachdem eine Anfrage initialisiert wurde. Auf den ersten Blick wird es ein wenig haarig genau, was passiert, aber das Config-Objekt scheint einige Standard-Callbacks zu haben. Ich nehme an, wenn etwas falsch mit der tatsächlichen Anfrage Syntax/Config ist, oder Winkel tritt ein Problem beim Senden der Anfrage (vielleicht kein Netzwerk verfügbar oder so ähnlich), dann das ursprüngliche Versprechen wird als abgelehnt, und dies würde die requestError Handler verursachen aufgerufen werden.