關於$ 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