AngularJS文档中有关于$httpsuccesserror方法的弃用声明。从库中删除此抽象是否有特定原因?

#1 楼

问题在于.success.error方法不可链接,因为它们忽略了返回值。这给熟悉链接的人带来了问题,并鼓励不熟悉链接的人提供不良代码。见证所有使用延迟反模式的StackOverflow示例。

引用AngularJS团队之一:


IMO .success.error有点不好首先是API设计。此问题突出表明,在许多情况下,开发人员会感到困惑,因为他们期望.success.error的工作方式与.then相同,反之亦然。相反,我们可以鼓励开发人员使用标准的$http promise API $q.then。与使用响应对象相比,与使用响应对象相比,IMO在使用显式参数方面几乎没有任何好处。

— AngularJS问题#10508 .catch $http.success/.error的工作方式不同。





弃用通知(v1.5)

.then传统承诺方法$httpsuccess已弃用。请改用标准的error方法。如果将then设置为$httpProvider.useLegacyPromiseExtensions,则这些方法将引发false错误。

— AngularJS $ http服务API参考-弃用声明






UPDATE

不推荐使用的$http/legacy.success方法已从AngularJS 1.6中删除。


由于b54a39,.error的不推荐使用的自定义回调方法-$http.success()-已被删除。您可以改用标准的.error() / .then() promise方法,但是请注意,方法签名和返回值是不同的。

$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使用的与Promise相关的模式仅与.then(successCallback, errorCallback)一起使用,因此他们可能旨在使用js模式。