提问者:小点点

Angular HttpPromise:`success`/`error`方法与`then`参数之间的差异


根据AngularJS文档,对$HTTP的调用返回以下内容:

返回一个使用标准then方法和两个http特定方法的promise对象:success和Error。then方法接受两个参数,一个success和一个error回调,这两个回调将用响应对象调用。success和error方法采用单个参数--一个将分别在请求成功或失败时调用的函数。传递到这些函数中的参数是传递到then方法中的响应对象的销毁表示。

除了响应对象在一种情况下会被销毁之外,我不知道

  • 传递的成功/错误回调将作为的参数传递。然后
  • 作为允诺的参数传递的回调。success/允诺。error允诺方法

有吗?这两种不同的方式传递看似相同的回调有什么意义呢?


共3个答案

匿名用户

这个答案实际上是不正确的;正如下面的一个注释所指出的,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){/*...*/})
  1. $http.get()
  2. seqfunc1()
  3. seqfunc2()

success()驱动并行操作,因为处理程序被链接在相同的承诺上。

$http(/*...*/).
  success(function parFunc1(data){/*...*/}).
  success(function parFunc2(data){/*...*/})
  1. $http.get()
  2. 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
});