ejo*_*aud 177 promise angularjs
根据AngularJS doc,调用$http返回以下内容:
使用标准then方法和两个http特定方法返回promise对象:success和error.所述然后方法有两个参数一成功以及错误回调将与响应对象被调用.的成功和错误的方法采取一个参数-一当请求成功或失败分别将被调用的函数.传递给这些函数的参数是传递给then方法的响应对象的析构表示.
除了response在一种情况下对象被解构的事实之外,我没有区别
promise.thenpromise.success/ promise.error方法的参数传递有没有?这两种不同方式通过看似相同的回调有什么意义?
eve*_*_jr 204
这里有一些很好的答案.但是,将并行性的差异推向家庭是值得的:
success() 返回原始承诺then() 返回一个新的承诺不同之处在于then()驱动顺序操作,因为每次调用都会返回一个新的promise.
$http.get(/*...*/).
then(function seqFunc1(response){/*...*/}).
then(function seqFunc2(response){/*...*/})
Run Code Online (Sandbox Code Playgroud)
$http.get()seqFunc1()seqFunc2()success() 驱动并行操作,因为处理程序链接在同一个承诺上.
$http(/*...*/).
success(function parFunc1(data){/*...*/}).
success(function parFunc2(data){/*...*/})
Run Code Online (Sandbox Code Playgroud)
$http.get()parFunc1(),parFunc2()并行pko*_*rce 156
NB这个答案事实上是不正确的; 正如下面的评论所指出的,success()确实会返回原始的承诺. 我不会改变; 并将其留给OP进行编辑.
2之间的主要区别在于,.then()call返回一个promise(使用从回调返回的值解析),而.success()更传统的方式是注册回调并且不返回promise.
基于Promise的回调(.then())可以轻松链接承诺(进行调用,解释结果然后再进行一次调用,解释结果,再做一次调用等).
.success()当您不需要链接调用或使用promise API时(例如,在路由中),该方法是一种简化的方便方法.
简而言之:
.then() - promise API的全部功能,但稍微冗长.success() - 不会返回承诺,但会提供稍微方便的语法The*_*ppo 114
简单GET请求的一些代码示例.也许这有助于理解差异.使用then:
$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
});
Run Code Online (Sandbox Code Playgroud)
使用success/ error:
$http.get('/someURL').success(function(data, status, header, config) {
// success handler
}).error(function(data, status, header, config) {
// error handler
});
Run Code Online (Sandbox Code Playgroud)
naw*_*rgs 27
.then()是可链接的,将等待之前的.then()来解决.
.success()和.error()可以链接,但它们都会立刻触发(所以没那么多)
.success()和.error()非常适合简单的调用(简单的制作者):
$http.post('/getUser').success(function(user){
...
})
Run Code Online (Sandbox Code Playgroud)
所以你不必输入这个:
$http.post('getUser').then(function(response){
var user = response.data;
})
Run Code Online (Sandbox Code Playgroud)
但通常我用.catch()处理所有错误:
$http.get(...)
.then(function(response){
// successHandler
// do some stuff
return $http.get('/somethingelse') // get more data
})
.then(anotherSuccessHandler)
.catch(errorHandler)
Run Code Online (Sandbox Code Playgroud)
如果你需要支持<= IE8,那么就像这样编写.catch()和.finally()(IE中的保留方法):
.then(successHandler)
['catch'](errorHandler)
Run Code Online (Sandbox Code Playgroud)
工作实例:
这是我用更多的编码格式编写的内容,用于刷新我的内存,了解它如何处理错误等:
http://jsfiddle.net/nalberg/v95tekz2/
Mic*_*lLo 17
只是为了完成,这是一个代表示例差异的代码示例:
成功\错误:
$http.get('/someURL')
.success(function(data, status, header, config) {
// success handler
})
.error(function(data, status, header, config) {
// error handler
});
Run Code Online (Sandbox Code Playgroud)
然后:
$http.get('/someURL')
.then(function(response) {
// success handler
}, function(response) {
// error handler
})
.then(function(response) {
// success handler
}, function(response) {
// error handler
})
.then(function(response) {
// success handler
}, function(response) {
// error handler
}).
Run Code Online (Sandbox Code Playgroud)