Документация AngularJS содержит Уведомление об изъятии для методов success
и error
в $http
. Есть ли конкретная причина, по которой эта абстракция была удалена из библиотеки?
Почему устаревшие/ошибки метода AngularJS $ http не рекомендуются? Удалено из v1.6?
Ответ 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-шаблон.