关于$ HTTP的官方文档:
的$ HTTP API是基于由$ Q 服务公开的递延/承诺的API。
的$ HTTP服务是一个函数,它接受一个参数 - 一个 配置对象 - 这是用来生成一个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返回一个承诺,我为什么要使用$ q返回一个承诺?
嗯。这很奇怪。通常情况下,你只需要做一些类似'.success()。then()'的东西。我想知道他们的文档是否令人难以置信地过时,或者由于某些原因angular不支持承诺链接。 – m0meni
@ AR7,Angular确实支持承诺链接,而不是使用'success()'方法,现在已经废弃了。有关详细信息,请参阅下面的答案。用'$ http.get()。然后()'一切按预期工作。 – lex82