Angularjs 角度HttpPromise:'success`/'error`方法和'then`';s的论点
根据,调用Angularjs 角度HttpPromise:'success`/'error`方法和'then`';s的论点,angularjs,promise,Angularjs,Promise,根据,调用$http返回以下内容: 返回一个带有标准然后方法和两个http特定方法的promise对象:success和error。then方法接受两个参数,一个是success,一个是error回调,该回调将由响应对象调用。success和error方法使用一个参数-当请求成功或失败时分别调用该函数。传入这些函数的参数是传入then方法的响应对象的非结构化表示 除了响应对象在一种情况下被解构这一事实之外,我不知道它们之间的区别 成功/错误回调作为promise的参数传递。然后 回调作为承诺的
$http
返回以下内容:
返回一个带有标准然后方法和两个http特定方法的promise对象:success和error。then方法接受两个参数,一个是success,一个是error回调,该回调将由响应对象调用。success和error方法使用一个参数-当请求成功或失败时分别调用该函数。传入这些函数的参数是传入then方法的响应对象的非结构化表示
除了响应
对象在一种情况下被解构这一事实之外,我不知道它们之间的区别
- 成功/错误回调作为
promise的参数传递。然后
- 回调作为承诺的
/promise.success
方法的参数传递promise.error
2之间的主要区别在于
.then()
调用返回一个承诺(使用回调返回的值进行解析),而.success()
是注册回调的更传统的方法,不返回承诺
基于承诺的回调(.then()
)使链接承诺变得容易(执行一个调用、解释结果,然后执行另一个调用、解释结果、再执行另一个调用等)
.success()
方法是一种简化、方便的方法,当您不需要链式调用或使用promise API时(例如,在路由中)
简言之:
-promise API的全部功能,但稍显冗长.then()
-不返回承诺,但提供更方便的语法.success()
然后
:
$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
});
下面是一个代码示例,用于说明差异: 成功\错误:
$http.get('/someURL')
.success(function(data, status, header, config) {
// success handler
})
.error(function(data, status, header, config) {
// error handler
});
然后:
这里已经有了一些很好的答案。但值得一提的是,在并行性方面存在差异:
返回原始承诺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()
并行
.then()是可链接的,将等待上一个.then()解析
.success()和.error()可以链接,但它们会同时触发(因此没有太多的意义)
.success()和.error()仅适用于简单调用(easy makers):
因此,您不必键入以下内容:
$http.post('getUser').then(function(response){
var user = response.data;
})
但通常我使用.catch()处理所有错误:
如果您需要支持,请使用标准then方法。
弃用通知书:
$http legacy promise方法success和error已被弃用。改用标准then方法。如果
$httpProvider.useLegacyPromiseExtensions设置为false,则这些
方法将抛出$http/legacy错误
另一个很大的区别是,
then
回调只接受一个参数--response--success
和error
将响应的各个组件作为参数--data
,status
,header
和config
@BrandonTilley完全正确,但是问题的作者已经解决了这个问题,所以我不想在这里重复。虽然文档没有明确说明,但我们可以推断.success()
方法返回原始的$http promise对象,因为链$http(…).success(…).error(…)
是可能的。如果逆$http(…).error(…).success(…)
也是可能的,那么.error()
也应该返回原始的promise对象。.then()
的区别在于它返回一个新的承诺。源代码来自$http服务的angular.js:promise.success=function(fn){promise.then(function(response){fn(response.data,response.status,response.headers,config);});返回承诺;}代码>请注意,success
已被弃用。在中,$http legacy promise方法success和error已被弃用。改用标准then方法。如果$httpProvider.useLegacyPromiseExtensions设置为false,则这些方法将抛出$http/legacy错误。
谢谢,但问题更多的是这些函数的作用不同,或者如果它们做相同的事情,它们都存在的原因。如何使用它们的区别可以从文档中理解。我个人喜欢简短的代码示例,这就是我在这里发布它们的原因。有角度的文档有时会漏掉简短而精确的示例。重要的是要强调这样一个事实:第一个gist的respond对象包含第二个gist的“data、status、heade和config”。这意味着响应对象有一个级别的ad
$http.post('/getUser').success(function(user){
...
})
$http.post('getUser').then(function(response){
var user = response.data;
})
$http.get(...)
.then(function(response){
// successHandler
// do some stuff
return $http.get('/somethingelse') // get more data
})
.then(anotherSuccessHandler)
.catch(errorHandler)
.then(successHandler)
['catch'](errorHandler)