61

$http successAngularJS 文档对和error方法有一个弃用通知。从库中删除此抽象是否有特定原因?

4

2 回答 2

88

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

引用 AngularJS 团队之一的话:

IMO.success并且.error首先是一个糟糕的 API 设计。这个问题突出了一些开发人员感到困惑的情况,因为他们要么期望.success.error以相同的方式工作,.then反之亦然。在一个完美的世界里,我宁愿放弃这些$http具体的“承诺”。相反,我们可以鼓励开发人员使用标准的$qPromise API.then.catch. 与使用响应对象相比,使用显式参数对 IMO 几乎没有好处。

— AngularJS 问题 #10508 与工作方式$http .success/.error不同.then

弃用通知 (v1.5)

$http遗留的Promise 方法已被弃用successerror请改用标准then方法。如果$httpProvider.useLegacyPromiseExtensions设置为,false则这些方法将引发$http/legacy错误。

— AngularJS $http 服务 API 参考 — 弃用通知


更新

AngularJS 1.6 中删除了不推荐使用的.success和方法。.error

由于b54a39$http已弃用的自定义回调方法 -.success()并且.error()- 已被删除。您可以改用标准.then()/ .catch()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

于 2016-02-11T05:20:02.833 回答
1

它使用的 javascript 与 promises 相关的模式只有 with .then(successCallback, errorCallback),所以他们可能打算使用 js 模式。

于 2016-02-11T01:51:32.290 回答