В документации AngularJS есть уведомление об устаревании методов $http
success
и error
. Есть ли конкретная причина, по которой эта абстракция была удалена из библиотеки?
Почему методы успеха/ошибки AngularJS $http устарели? Удалено из версии 1.6?
Ответы (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
Шаблон, который использует javascript, связанный с обещаниями, только с .then(successCallback, errorCallback)
, поэтому они, вероятно, стремятся использовать шаблон js.