AngularJS-承诺vs?

AngularJS-承诺vs?,angularjs,promise,Angularjs,Promise,我有两个问题- 1) “成功”和“然后”有什么区别? 示例-$http.get(url)。然后vs$http.get(url)。成功吗 2) 承诺意味着将来会执行的事情,好吧。我无法理解这与函数调用的区别。当我们使用“$q.defer.resolve()”进行调用时,将执行承诺调用。这不是函数调用吗?那么,为什么这不能是一个正常的函数,并与任何其他函数调用(如foo())一起执行呢?我是否错过了承诺所能带来的特别的东西 。然后返回一个新的承诺 .success返回原始承诺。另一个区别是.succ

我有两个问题-

1) “成功”和“然后”有什么区别? 示例-$http.get(url)。然后vs$http.get(url)。成功吗


2) 承诺意味着将来会执行的事情,好吧。我无法理解这与函数调用的区别。当我们使用“$q.defer.resolve()”进行调用时,将执行承诺调用。这不是函数调用吗?那么,为什么这不能是一个正常的函数,并与任何其他函数调用(如foo())一起执行呢?我是否错过了承诺所能带来的特别的东西

。然后
返回一个新的承诺

.success
返回原始承诺。另一个区别是
.success
获取
响应。data
作为输入参数,而
获取
响应

这是:

您可以使用
.success
(和
.error
)处理
$http
的相应结果,但不能修改数据或拒绝向
$http
承诺的最终消费者提供的承诺(使用
return$q.reject()

下面是一个示例,说明何时可以使用
。success
进行比较。然后

return {
  getData: function(p1){
    return $http.get(url, {p1: p1})
             .success($log.log) // can use generic functions since there is 
             .error($log.error) // no requirement to return data
             .then(function(response){
                // here can massage the data into the output format
                return response.data; 
             });
};
我建议始终使用
.then
,因为它会返回一个新的承诺,而不使用
.success
.error
处理程序;这避免了API消费者使用特定的
$http
.success
/
.error
的机会,从而无意中假设
$http
是在封面下使用的

“成功”和“然后”有什么区别

then()
接受一个参数:http响应对象
success()
接受4个参数:响应数据、响应状态、响应头和http配置对象<因此,当您只关心返回的数据时,code>success()
更易于使用。正如New Dev所说,返回的值是不同的:
then()
为从其回调返回的任何内容返回一个新的承诺,并允许您返回一个新的值,从而构建一个承诺链,而
success()
返回原始承诺

承诺意味着将来要执行的事情

不,不是真的。承诺是你现在执行的某件事情的结果,但结果不是立即可用的。因为JavaScript是单线程的,所以不能只是阻塞并等待结果,因为那样会完全冻结应用程序。因此,您只需注册一个回调函数,当结果可用时,该函数将被异步调用。例如:

$http.get('/some/url')
立即发送HTTP请求。但是为了得到结果,我们需要等待字节传输到服务器,等待服务器处理请求并发送回响应,等待响应传输到浏览器。这可能需要几秒钟。因此,$http.get()立即返回的是一个承诺:即表示未来结果的对象(或者,一旦收到结果,表示曾经是未来的结果)

$http.get('/some/url')