AngularJS文档包含$http
success
和error
方法的弃用通知。这个抽象是从库中删除的具体原因吗?
答案 0 :(得分:78)
问题是.success
和.error
方法无法链接,因为忽略返回值。这会给熟悉链接的人带来问题,并鼓励不熟悉链接的人员编写错误的代码。见证StackOverflow上使用deferred anti-pattern。
引用一个AngularJS团队:
首先,IMO
.success
和.error
是一个糟糕的API设计。此问题突出了一些开发人员感到困惑的情况,因为他们希望.success
和.error
的工作方式与.then
相同,反之亦然。 在一个完美的世界里,我宁愿放弃这些$http
特定的#34;承诺"。相反,我们可以鼓励开发人员使用标准$q
承诺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
已弃用的.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; ... });
答案 1 :(得分:1)
它使用的javascript与promises相关的模式仅与.then(successCallback, errorCallback)
一致,因此它们可能旨在使用js模式。