为什么不推荐使用AngularJS$http成功/错误方法?已从 v1.6 中删除



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

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

引用AngularJS团队之一的话:

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

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

弃用通知 (v1.5(

$http旧版承诺方法successerror已被弃用。请改用标准then方法。如果$httpProvider.useLegacyPromiseExtensions设置为 false则这些方法将引发$http/legacy错误。

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


更新

已弃用的.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;
    ...
  });

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

javascript 它使用的模式与承诺有关,只与 .then(successCallback, errorCallback) 有关,所以他们可能的目标是使用 js 模式。

相关内容

  • 没有找到相关文章

最新更新