$http
success
AngularJS 文档对和error
方法有一个弃用通知。从库中删除此抽象是否有特定原因?
2 回答
问题是.success
和.error
方法是不可链接的,因为它们忽略了返回值。这给熟悉链式的人带来了问题,并鼓励不熟悉链式的人写出糟糕的代码。见证 StackOverflow 上所有使用延迟反模式的示例。
引用 AngularJS 团队之一的话:
IMO
.success
并且.error
首先是一个糟糕的 API 设计。这个问题突出了一些开发人员感到困惑的情况,因为他们要么期望.success
并.error
以相同的方式工作,.then
反之亦然。在一个完美的世界里,我宁愿放弃这些$http
具体的“承诺”。相反,我们可以鼓励开发人员使用标准的$q
Promise API.then
和.catch
. 与使用响应对象相比,使用显式参数对 IMO 几乎没有好处。
弃用通知 (v1.5)
$http
遗留的Promise 方法已被弃用success
。error
请改用标准then
方法。如果$httpProvider.useLegacyPromiseExtensions
设置为,false
则这些方法将引发$http/legacy
错误。
更新
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; ... });
它使用的 javascript 与 promises 相关的模式只有 with .then(successCallback, errorCallback)
,所以他们可能打算使用 js 模式。