web-dev-qa-db-fra.com

Pourquoi les méthodes succès / erreurs AngularJS $ http sont-elles déconseillées? Enlevé de la v1.6?

La documentation AngularJS contient un avis de dépréciation pour le $httpsuccess et error méthodes. Y a-t-il une raison spécifique pour laquelle cette abstraction a été retirée de la bibliothèque?

54
philoniare

Le problème était que les méthodes _.success_ et _.error_ ne sont pas chaînables car elles ignorent le retour valeurs . Cela posait des problèmes aux personnes familiarisées avec le chaînage et encourageait le code pauvre émanant de personnes inconnues du chaînage . Observez tous les exemples sur StackOverflow qui utilisent le anti-motif différé .

Pour citer l'un des membres de l'équipe AngularJS:

IMO _.success_ et _.error_ étaient une mauvaise conception d’API. Ce problème met en évidence un certain nombre de situations dans lesquelles les développeurs sont désorientés, car ils s’attendent à ce que _.success_ et _.error_ fonctionnent de la même manière que _.then_ ou vice versa. Dans un monde parfait, je préférerais simplement laisser tomber ces "promesses" _$http_. Au lieu de cela, nous pourrions encourager les développeurs à utiliser les API __ _$q_ et _.then.catch_ standard (SOMECODE) __. Il est très avantageux pour l’OMI de travailler avec des paramètres explicites par rapport à l’objet de réponse.

- AngularJS Issue # 10508 _$http_ _.success/.error_ différent de la façon dont _.then_ fonctionne.

Avis de dépréciation (v1.5)

Les méthodes de promesse héritées _$http_ success et error sont obsolètes. Utilisez plutôt la méthode standard then. Si _$httpProvider.useLegacyPromiseExtensions_ est défini sur false, ces méthodes généreront une erreur _$http/legacy_.

- Référence d'API de service AngularJS $ http - avis de dépréciation


MISE À JOUR

Les méthodes obsolètes _.success_ et _.error_ ont été supprimées de AngularJS 1.6.

En raison de b54a39 , les méthodes de rappel personnalisées obsolètes de _$http_ - .success() et .error() - ont été supprimées. Vous pouvez utiliser les méthodes standard .then()/.catch() promise, mais notez que les signatures et les valeurs renvoyées par la méthode sont différentes.

_$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;
    ...
  });
_

- - Guide du développeur AngularJS - Migration vers v1.6 - http

80
georgeawg

Le modèle que javascript utilise en relation avec les promesses est uniquement avec .then(successCallback, errorCallback), donc ils visent probablement à utiliser le modèle js.

1
Igor Santana