我在这里阅读这篇文章:http://weblog.west-wind.com/posts/2014/Oct/24/AngularJs-and-Promises-with-the-http-Service 它说使用包装承诺是流行的模式,但Angular的官方文档https://docs.angularjs.org/api/ng/service/$http说" $ http遗留承诺方法成功和错误已被弃用。请改用标准方法。如果$ httpProvider.useLegacyPromiseExtensions设置为false,那么这些方法将抛出$ http / legacy错误",我应该采取哪种方式?我似乎必须使用then()。
任何人都可以解雇一下吗?感谢
答案 0 :(得分:1)
快速回答:不要包裹$http
承诺。
在article you cite,这家伙写道:
就我个人而言,我已经辞职,只是转发$ http生成的Promises并使用.success()和.error(),代价是一点点不一致。此时我必须知道我的服务中的这个特定调用返回$ http承诺,并且我需要在其上调用.success()和.error()函数而不是.then()来处理回调而不是。但我仍然希望用额外的Promise包装我的服务。无论你在哪里推动这种行为,在堆栈的某个地方你最终都会出现这种不一致的情况,即$ http promises和stock Promises之间的差异显示出来 - 所以我不妨把它推到应用程序层并保存一些无意义的编码来隐藏实施细节。
这是胡说八道。 $http
服务始终返回$q
个承诺。 .then
和.catch
方法始终可用。 (没有详细记录,但可用。)
这是我写的另一个问题。
.success
服务中.error
和$http
方法的弃用
AngularJS团队在他们新发现的智慧中决定弃用.success
和.error
方法。那些方法都是错误的,我说好摆脱。
有关.success
和.error
方法的弃用(或我应该说失败)的详细信息,请访问最新的AngularJS $http Service API Docs -- deprecation notice。
我们应该避免使用.success
和.error
方法,并且从现在开始学习使用.then
,.catch
和.finally
。
Legacy AngularJS v1.2
我做了一些spelunking in the AngularJS Github。旧版$http
服务会创建$q
承诺(L750),然后附加错误.success
方法(L769)和错误.error
方法{{3} }。
这意味着使用旧版AngularJS的人可以迁移到.then
,.catch
和.finally
方法。
- (L776)