【发布时间】:2016-04-24 11:52:46
【问题描述】:
关于官方文档中的$http:
$http API 基于 $q 公开的 deferred/promise API 服务。
$http 服务是一个接受单个参数的函数——a 配置对象——用于生成 HTTP 请求和 返回一个承诺
那么下面的代码是什么意思:
var deferred = $q.defer();
var promise = deferred.promise;
var progress;
$http.get("https://api.github.com/repos/angular/angular.js/pulls")
.success(function(data){
var result = [];
for(var i = 0; i < data.length; i++){
result.push(data[i].user);
progress = (i+1)/data.length * 100;
deferred.notify(progress);
}
deferred.resolve(result);
})
.error(function(error){
deferred.reject(error);
});
return promise;
如果 $http 返回一个 Promise,我为什么要使用 $q 返回一个 Promise?
【问题讨论】:
-
嗯。这很奇怪。通常你会做类似
.success().then()的事情。我想知道他们的文档是否已经过时了,或者由于某种原因 Angular 不支持 Promise 链接。 -
@AR7,Angular 确实支持承诺链,只是不支持
success()方法,该方法现在已弃用。有关详细信息,请参阅下面的我的答案。使用$http.get().then()一切正常。
标签: angularjs http promise angular-promise