为什么angular度的$ http成功/错误方法不推荐使用? 从v1.6中删除?
angular度文档有$http
success
和error
方法的弃用声明。 这个抽象是从图书馆中删除的有一个特定的原因吗?
问题是.success
和.error
方法不可链接,因为它们忽略返回值 。 这给熟悉链接的人们带来了麻烦,并鼓励不熟悉链接的人们编写糟糕的代码。 见证使用延迟反模式的所有StackOverflow示例。
引用AngularJS团队之一:
IMO
.success
和.error
是一个糟糕的APIdevise。 这个问题突出了一些情况,开发人员感到困惑,因为他们希望.success
和.error
的工作方式与.success
相反,反之亦然。 在一个完美的世界里,我宁愿放弃这些$http
特定的“承诺”。 相反,我们可以鼓励开发人员使用标准的$q
promise API。然后和.catch
。 IMO在使用响应对象的显式参数方面几乎没有什么好处。– AngularJS问题#10508
$http
.success/.error
不同于.success/.error
工作方式。
弃用通知(v1.5)
$http
传统promise方法的success
和error
已被弃用。 改为使用标准then
方法。 如果$httpProvider.useLegacyPromiseExtensions
设置为false
那么这些方法将抛出$http/legacy
错误。– AngularJS $ http服务API参考 – 弃用声明
UPDATE
已弃用的.success
和.error
方法已从AngularJS 1.6中删除。
由于b54a39 ,
$http
不推荐使用的自定义callback方法 –.success()
和.error()
– 已被删除。 您可以使用标准的.catch()
.then()
/.catch()
承诺方法,但请注意,方法签名和返回值是不同的。$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所使用的与promise相关的模式只与.then(successCallback, errorCallback)
,所以他们可能会使用js模式。