Почему методы успеха/ошибки AngularJS $http устарели? Удалено из версии 1.6?

В документации AngularJS есть уведомление об устаревании методов $http success и error. Есть ли конкретная причина, по которой эта абстракция была удалена из библиотеки?


person philoniare    schedule 11.02.2016    source источник


Ответы (2)


Проблема заключалась в том, что методы .success и .error не объединяются в цепочки, поскольку они игнорируют возвращаемые значения. Это вызывало проблемы у людей, знакомых с связыванием, и поощряло плохой код у людей, не знакомых с связыванием. Взгляните на все примеры на StackOverflow, в которых используется отложенный антишаблон.

Чтобы процитировать одного из команды AngularJS:

IMO .success и .error изначально были плохой частью дизайна API. Эта проблема выдвигает на первый план ряд ситуаций, когда разработчики путаются, потому что они ожидают, что .success и .error будут работать так же, как .then, или наоборот. В идеальном мире я бы предпочел просто отказаться от этих $http конкретных «обещаний». Вместо этого мы могли бы поощрять разработчиков использовать стандартный $q API-интерфейс обещаний .then и .catch. ИМО очень мало пользы от работы с явными параметрами по сравнению с работой с объектом ответа.

— AngularJS Issue #10508 $http .success/.error отличается от того, как работает .then.

Уведомление об устаревании (v1.5)

Устаревшие методы обещаний $http success и error объявлены устаревшими. Вместо этого используйте стандартный метод then. Если для $httpProvider.useLegacyPromiseExtensions установлено значение false, эти методы будут вызывать ошибку $http/legacy.

https://code.angularjs.org/1.5.10/docs/api/ng/service/$http#deprecation-notice


ОБНОВИТЬ

Устаревшие методы .success и .error были удалены из AngularJS 1.6.

Из-за b54a39 устаревшие пользовательские методы обратного вызова $http.success() и .error() — были удалены. . Вместо этого вы можете использовать стандартные методы обещаний .then()/.catch(), но обратите внимание, что сигнатуры методов и возвращаемые значения отличаются.

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

https://code.angularjs.org/snapshot/docs/guide/migration#migrate1.5to1.6-ng-services-$http

person georgeawg    schedule 11.02.2016

Шаблон, который использует javascript, связанный с обещаниями, только с .then(successCallback, errorCallback), поэтому они, вероятно, стремятся использовать шаблон js.

person Igor Santana    schedule 11.02.2016