为什么不赞成AngularJS $ http成功/错误方法?从v1.6中删除了?

phi*_*are 56 angularjs angularjs-http angularjs-1.6

AngularJS文档有关于$http successerror方法的弃用通知.这个抽象是从库中删除的具体原因吗?

geo*_*awg 82

问题是,.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传统方法的承诺success,并error已被弃用.请改用标准then方法.如果$httpProvider.useLegacyPromiseExtensions设置为false那么这些方法将抛出$http/legacy错误.

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


UPDATE

不推荐使用.success.error方法已经从AngularJS 1.6去除.

由于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;
    ...
  });
Run Code Online (Sandbox Code Playgroud)

- AngularJS开发人员指南 - 迁移到v1.6 - http