¿Por qué los métodos de éxito/error AngularJS $ http están en desuso? Eliminado de v1.6?




angularjs-http angularjs-1.6 (2)

La documentación de AngularJS tiene un Aviso de desaprobación para los métodos de success y error $http . ¿Hay alguna razón específica por la que esta abstracción se eliminó de la biblioteca?


El patrón que usa JavaScript relacionado con las promesas es solo con .then(successCallback, errorCallback) , por lo que probablemente tengan como objetivo usar el patrón js.


El problema era que los métodos .success y .error no son encadenables porque ignoran los valores de retorno . Esto causó problemas a las personas familiarizadas con el encadenamiento y alentó un código pobre de personas que no están familiarizadas con el encadenamiento . Sea testigo de todos los ejemplos en que usan el antipatrón diferido .

Para citar a uno del equipo de AngularJS:

IMO .success y .error fueron un mal diseño de API en primer lugar. Este problema destaca una serie de situaciones en las que los desarrolladores se confunden porque esperan que .success y .error funcionen de la misma manera que .then o viceversa. En un mundo perfecto, preferiría deshacerme de estas "promesas" específicas de $http . En cambio, podríamos alentar a los desarrolladores a usar la API estándar $q promesa $q .then y .catch . Hay muy pocos beneficios de la OMI al trabajar con parámetros explícitos sobre trabajar con el objeto de respuesta.

- AngularJS Issue # 10508 $http .success/.error diferente de cómo funciona .then .

Aviso de desaprobación (v1.5)

Los métodos de promesa heredados $http han sido desaprobados y han tenido success . Utilice el método estándar de then lugar. Si $httpProvider.useLegacyPromiseExtensions se establece en false , estos métodos arrojarán $http/legacy error $http/legacy .

- AngularJS $ http Service API Reference - aviso de desuso

ACTUALIZAR

Los .success obsoletos .success y .error se han eliminado de AngularJS 1.6.

Debido a b54a39 , se han eliminado los métodos de devolución de llamada personalizados obsoletos de $http : .success() y .error() . En su lugar, puede utilizar los métodos de promesa estándar .then() / .catch() , pero tenga en cuenta que las firmas de métodos y los valores de retorno son diferentes.

$http(...)
  .then(function onSuccess(response) {
    // Handle success
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  }).catch(function onError(response) {
    // Handle error
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  });

- Guía del desarrollador de AngularJS - Migración a v1.6 - http





angularjs-1.6