Почему устаревшие/ошибки метода AngularJS $ http не рекомендуются? Удалено из v1.6?

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

Ответ 1

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

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

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

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

Уведомление об изъятии (v1.5)

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

- Ссылка на API-интерфейс AngularJS $HTTP - уведомление об отказе


UPDATE

Устаревшие методы .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;
    ...
  });

- Руководство разработчика AngularJS - Переход на v1.6 - http

Ответ 2

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