Angular.js: $ http Service Not Calling Error Callback en 400

Creado en 8 may. 2013  ·  26Comentarios  ·  Fuente: angular/angular.js

Versión: 1.1.4

createNewWall: function(wall, successCallback, errorCallback) {
    return $http.post($rootScope.baseAppsAPI + '/walls', null, {
       params: wall
    }).success(function(data, status) {
       return successCallback.call(this, data);
    }).error(function(data) {
       return errorCallback.call(this, data);
    });
}

Verifiqué que la función angular isSuccess está funcionando correctamente. Hice esto agregándolo al objeto de la ventana y verificando que el siguiente código (colocado en mi devolución de llamada exitosa) resultó en la devolución de llamada de error.

if (window.isSuccess(status)) {
   return successCallback.call(this, data);
} else {
  return errorCallback.call(this, data);
}

¿Alguna idea de qué está causando el problema? ¿Algo va mal con las promesas de $ http que no se rechazan / resuelven correctamente?

Comentario más útil

Para mí, la respuesta de @ lsiv568 funcionó. Es un poco extraño al principio, pero debe devolver una promesa rechazada manualmente cuando crea un interceptor de errores ( fuente ).

.factory('myInterceptor', function($q) {
  return {
    response: function (response) { return response; },
    responseError: function(response) {
      // do stuff or
      return $q.reject(response);
    }
  };
});

Todos 26 comentarios

Estoy enfrentando el mismo problema. La forma en que resolvió el problema puede significar que puedo estar haciendo algo mal, etc. ¿Puede compartir su solución? No puedo encontrar esto en ningún lado.

Robert.,

Cerré el problema porque el problema desapareció (milagrosamente) después de que
Hice algunas modificaciones a mi servicio. Sin embargo, parece volver
intermitentemente. Entonces, ya no sé si es un problema de mi parte o un
verdadero problema con angular. Si quieres, puedo reabrir el problema y puedes
agregarle su problema? ¿Eso funciona para ti?

El lunes 13 de mayo de 2013 a las 9:13 a. M., Robert [email protected] escribió:

Estoy enfrentando el mismo problema. La forma en que cerró el problema puede significar que yo
puede estar haciendo algo mal, etc. ¿Puede compartir su solución? Hipocresía
encontrar esto en cualquier lugar.

-
Responda a este correo electrónico directamente o véalo en Gi
.

Respetuosamente,

Louis W. Sivillo

Como se indicó anteriormente, reabriré este problema porque ocurre de manera intermitente. rtpm, incluya su caso de uso / cualquier información adicional que pueda ayudar a identificar el problema

Robert,
Gracias por enviar esto.

Tenía un interceptor http que escribí para la autenticación básica que no rechazaba la promesa sobre errores de respuesta.

Gracias bot de ustedes. Yo tuve el mismo problema.

Me pasa +1 cuando el servidor devuelve 401

+1
La función de devolución de llamada no funciona mientras el servidor devuelve el código de estado 401.

¿Algún progreso en esto? Frente al mismo problema con un 400.

Para mí, la respuesta de @ lsiv568 funcionó. Es un poco extraño al principio, pero debe devolver una promesa rechazada manualmente cuando crea un interceptor de errores ( fuente ).

.factory('myInterceptor', function($q) {
  return {
    response: function (response) { return response; },
    responseError: function(response) {
      // do stuff or
      return $q.reject(response);
    }
  };
});

Frente al mismo problema con un 400 ..
Pero, ¿por qué se cierra el tema? ¿Existe alguna solución específica para este problema?

También estoy enfrentando este problema con el error 400. ¿Se resolvió este problema? Si es así, ¿en qué versión?

Me encuentro con el mismo problema con todos los> 299 errores. Estoy usando Restangular con un interceptor de respuesta personalizado, pero obtengo el error con el servicio $ http listo para usar, con la excepción de un encabezado de token CSRF. (Intenté rechazar el objeto diferido desde Restangular manualmente de todos modos, pero como era de esperar, eso no cambió nada).

También me encuentro con este problema, ¿podemos reabrirlo?

El problema informado en el problema original se debió a que un interceptor personalizado no manejó las condiciones de error correctamente (no se rechazó una promesa). Si alguien aún encuentra un problema, probablemente sea la misma situación; verifique que no tenga interceptores personalizados con errores. Si aún cree que algo no está del todo bien en el lado de AngularJS, proporcione un escenario _minimal, live_ reproduzca (idealmente usando http://plnkr.co/ pero cualquier otra herramienta similar servirá).

@ pkozlowski-opensource Gracias, de hecho puedo confirmar que ese fue mi problema (d'oh).

Debería haber una nota en los documentos de Angular con respecto a esto: no tenía idea de que estaba anulando por completo el comportamiento de la promesa $ http al implementar mi interceptor.

También encontré este problema y tuve un interceptor que miré una y otra vez porque de hecho tenía el retorno correcto. Finalmente encontré al culpable. Si está utilizando múltiples llamadas a éxito / error o entonces debe asegurarse de que también devuelvan lo correcto :) las devoluciones de llamada exitosas deben devolver la respuesta modificada, mientras que las devoluciones de llamada de error deben devolver un rechazo con $ q.reject al igual que el interceptor.

+1 gracias chicos. Tuve el mismo problema con la personalización global de $ http.interceptor

+1 para la respuesta de @chmanie . ¡Muchos gracias! Arreglado nuestro problema.

+1 ¡Gracias @chmanie! arreglé mi problema también

+1 Gracias, el rechazo me lo arregló!

+1 .gracias por solucionar mi problema.

+1 Gracias, el rechazo me lo arregló!

La solución de @chmanie funciona para mí.

La solución

@chmanie gracias ~

¿Fue útil esta página
0 / 5 - 0 calificaciones