根据AngularJS文档,对$HTTP
的调用返回以下内容:
返回一个使用标准then方法和两个http特定方法的promise对象:success和Error。then方法接受两个参数,一个success和一个error回调,这两个回调将用响应对象调用。success和error方法采用单个参数--一个将分别在请求成功或失败时调用的函数。传递到这些函数中的参数是传递到then方法中的响应对象的销毁表示。
除了响应
对象在一种情况下会被销毁之外,我不知道
的参数传递。然后
允诺的参数传递的回调。success
/允诺。error
允诺方法有吗?这两种不同的方式传递看似相同的回调有什么意义呢?
这个答案实际上是不正确的;正如下面的一个注释所指出的,success()确实返回了最初的承诺。我不会改变;让OP来编辑。
两者之间的主要区别在于.then()
调用返回一个承诺(用回调返回的值解析),而.success()
则是注册回调的更为传统的方式,不返回承诺。
基于承诺的回调(.then()
)使链接承诺变得很容易(执行一个调用,解释结果,然后执行另一个调用,解释结果,执行另一个调用等等)。
.success()
方法是一种简化的,方便的方法,当您不需要链式调用或使用promise API时(例如,在路由中)。
简而言之:
.then()
-promise API的全部功能,但稍微详细一些.success()
-不返回承诺,但提供了稍微方便的语法
这里已经有一些好的答案了。但有必要说明一下所提供的并行性的差异:
success()
返回原始承诺then()
返回一个新的承诺区别在于then()
驱动顺序操作,因为每个调用返回一个新的承诺。
$http.get(/*...*/).
then(function seqFunc1(response){/*...*/}).
then(function seqFunc2(response){/*...*/})
$http.get()
seqfunc1()
seqfunc2()
success()
驱动并行操作,因为处理程序被链接在相同的承诺上。
$http(/*...*/).
success(function parFunc1(data){/*...*/}).
success(function parFunc2(data){/*...*/})
$http.get()
Parfunc1()
,Parfunc2()
并行
一些简单GET请求的代码示例。也许这有助于理解两者的区别。使用然后
:
$http.get('/someURL').then(function(response) {
var data = response.data,
status = response.status,
header = response.header,
config = response.config;
// success handler
}, function(response) {
var data = response.data,
status = response.status,
header = response.header,
config = response.config;
// error handler
});
使用成功
/错误
:
$http.get('/someURL').success(function(data, status, header, config) {
// success handler
}).error(function(data, status, header, config) {
// error handler
});