app.factory('documentListFactory',['$http','$q',function($http,$q){
//申明一个延迟
var deferred = $q.defer();
$http.get('http://3.cs/index.php?_json=1&_content=1').success(function(response){
deferred.resolve(response);
}).error(function(response){
deferred.reject(response);
});
// 返回承诺,这里并不是最终数据,而是访问最终数据的API
return deferred.promise;
}]);
app.factory('documentTagsFactory',['$http','$q',function($http,$q){
//申明一个延迟
return {
query(ids)
{
var deferred = $q.defer();
$http.post('http://3.cs/index.php/tags/assoc-tags',{
'id':ids ? ids : [1,23],
'model':'Document'
}).success(function(response){
deferred.resolve(response);
}).error(function(response){
deferred.reject(response);
});
return deferred.promise;
}
}
}]);
app.controller('listController',['$scope','$http','$q','documentListFactory','documentTagsFactory',function($scope,$http,$q,documentListFactory,documentTagsFactory){
var documentList = {};
/*
code.....
*/
//var promise = $q.all([documentListFactory,documentTagsFactory.query(documentListFactory)]);
promise.then(function(data){
//console.log(data);
//console.log(documentList);
//console.log(3);
});
}]);
如上程式碼,有兩個Facotry我都是用deferred延遲,使用promise來進行類似於同步加載的,
但現在有個問題
我documentTagsFactory裡面的方法query(ids)是需要一個參數進行傳遞的,而這個參數依賴documentListFactory的結果,
angularjs新手,這裡我卻不知道怎麼實現了,使用$q.all確實實現的多個同步,但是卻還是沒辦法傳遞參數,不知大家有什麼方法,
PS:本人非常不喜歡類似jquery裡面的
$.get(function(){
$.get(function(){
})
})
或
promise.then(function(){
promise2.then(function(){
})
})
這種巢狀。
要的是類似同步,並且非嵌套的方法,謝謝
http://stackoverflow.com/questions/24402911/abort-angularjs-http-request-deeply-nested-in-multiple-service-calls
$http執行回傳的結果就是一個promise,你又封裝一遍這是什麼意思?
直接這樣寫不就完了
避免callback hell我可以理解,但是promise的用法就是帶嵌套的,不喜歡也得這樣寫!想寫同步那就用ES6的Generetor或是ES7的async
使用
$q.when
方法http://jsfiddle.net/hjzheng/nd1wfkj3/