Maison > Questions et réponses > le corps du texte
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
过去多啦不再A梦2017-05-15 17:01:02
http://stackoverflow.com/questions/24402911/abort-angularjs-http-request-deeply-nested-in-multiple-service-calls
大家讲道理2017-05-15 17:01:02
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;
}]);
Ne serait-il pas préférable de l'écrire comme ça
app.factory('documentListFactory',['$http',function($http){
return $http.get('http://3.cs/index.php?_json=1&_content=1');
}]);
app.factory('documentTagsFactory', ['$http', function ($http) {
return {
query: function (ids) {
return $http.post('http://3.cs/index.php/tags/assoc-tags', {
'id': ids ? ids : [1, 23],
'model': 'Document'
});
}
}
}]);
documentListFactory
.success(function (ids) {
return documentTagsFactory.query(ids);
})
.success(function (data) {
//todo
});
淡淡烟草味2017-05-15 17:01:02
Utilisez la $q.when
méthode
(function () {
var app = angular.module("myApp", []);
app.service('noPromise', function() {
return {
getResult: function() {
return { status: "noPromise" };
}
};
});
app.service("promise", ['$q', '$timeout', function($q, $timeout) {
return {
getResult: function() {
var deferral = $q.defer();
$timeout(function() {
deferral.resolve( { status: "promise" } );
}, 1000);
return deferral.promise;
}
};
}]);
app.run(['$rootScope', '$q', 'noPromise', 'promise',
function ($rootScope, $q, noPromise, promise) {
$rootScope.status = 'Ready.';
$q.when(noPromise.getResult()).then(function(result) {
$rootScope.status = result.status;
});
$q.when(promise.getResult()).then(function(result) {
$rootScope.status = result.status;
});
}]);
})();
http://jsfiddle.net/hjzheng/nd1wfkj3/