为啥不推荐使用 AngularJS $http 成功/错误方法?从 v1.6 中删除?
Posted
技术标签:
【中文标题】为啥不推荐使用 AngularJS $http 成功/错误方法?从 v1.6 中删除?【英文标题】:Why are AngularJS $http success/error methods deprecated? Removed from v1.6?为什么不推荐使用 AngularJS $http 成功/错误方法?从 v1.6 中删除? 【发布时间】:2016-05-21 15:24:26 【问题描述】:AngularJS 文档有一个关于 $http
success
和 error
方法的弃用通知。从库中删除此抽象是否有特定原因?
【问题讨论】:
【参考方案1】:问题在于.success
和.error
方法不可链接,因为它们忽略返回值。这会给熟悉 chaining 的人带来问题,并鼓励不熟悉 chaining 的人编写糟糕的代码。见证 *** 上所有使用 deferred anti-pattern 的示例。
引用 AngularJS 团队之一的话:
IMO
.success
和.error
首先是 API 设计的糟糕之处。这个问题突出了开发人员感到困惑的许多情况,因为他们要么期望.success
和.error
以与.then
相同的方式工作,反之亦然。 在一个完美的世界里,我宁愿放弃这些$http
特定的“承诺”。相反,我们可以鼓励开发人员使用标准的$q
promise API.then
和.catch
。使用显式参数与使用响应对象相比,IMO 几乎没有什么好处。— AngularJS Issue #10508
$http
.success/.error
dissimilar from how.then
works.
弃用通知 (v1.5)
$http
旧承诺方法success
和error
已被弃用。请改用标准的then
方法。如果将$httpProvider.useLegacyPromiseExtensions
设置为false
,那么这些方法将抛出$http/legacy
错误。— AngularJS $http Service API Reference -- deprecation notice
更新
已从 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 Developer Guide - Migrating to v1.6 - http
【讨论】:
【参考方案2】:它使用的javascript与promise相关的模式只有.then(successCallback, errorCallback)
,所以他们可能打算使用js模式。
【讨论】:
以上是关于为啥不推荐使用 AngularJS $http 成功/错误方法?从 v1.6 中删除?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 AngularJS 指令中不推荐使用 `replace` 属性? [复制]
为啥AngularJS的$http指定了Request Method无效
为啥这个 AngularJS 代码中的 HTTP POST 返回空? [复制]