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);
});
}]);
Comme indiqué dans le code ci-dessus, j'utilise un délai différé pour deux usines et j'utilise promise pour effectuer un chargement synchrone similaire
Mais il y a maintenant un problème
La méthode query(ids) dans mon documentTagsFactory nécessite un. les paramètres sont passés, et ce paramètre dépend de En m'appuyant sur le résultat de documentListFactory,
Je suis nouveau sur Angularjs, mais je ne sais pas comment l'implémenter ici, j'utilise $q.all pour réaliser plusieurs synchronisations, mais je ne parviens toujours pas à transmettre des paramètres, je me demande. si vous avez des méthodes,
PS : je n'aime vraiment pas
$.get(function(){
$.get(function(){
})
})
ou
promise.then(function(){
promise2.then(function(){
})
})
Ce genre de nidification.
Ce que je veux, c'est une méthode de type synchronisation et non imbriquée, merci
http://stackoverflow.com/questions/24402911/abort-angularjs-http-request-deeply-nested-in-multiple-service-calls
Le résultat renvoyé par l'exécution de $http est une promesse. Qu'est-ce que cela signifie si vous l'encapsulez à nouveau ?
Ne serait-il pas préférable de l'écrire comme ça
Je peux comprendre qu'il faut éviter l'enfer des rappels, mais l'utilisation de promise est imbriquée, vous devez donc l'écrire comme ça même si vous ne l'aimez pas ! Si vous souhaitez écrire une synchronisation, utilisez Generetor d'ES6 ou async d'ES7
Utilisez la
$q.when
méthodehttp://jsfiddle.net/hjzheng/nd1wfkj3/