¿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 tenidosuccess
. Utilice el método estándar dethen
lugar. Si$httpProvider.useLegacyPromiseExtensions
se establece enfalse
, estos métodos arrojarán$http/legacy
error$http/legacy
.
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