Plusieurs enchaîné différé fonctions à l'aide de q dans AngularJS arrêt de renvoi de données
Je suis en train d'enchaîner plusieurs différés appels de fonctions telles que le prochain appel obtient les résultats de la précédente différé.résoudre. Quand j'ai de la chaîne d'ensemble plus de 2 de ces appels, les données s'arrête d'être renvoyé.
Voici le code de base à l'intérieur d'un angulaire de contrôleur:
$scope.runAsync = function() {
var asyncFn1 = function(data){
var deferred = $q.defer();
$timeout(function(){
console.log("Async fn1 " + data);
$scope.outputLines.push("Async fn1 " + data);
deferred.resolve("Async fn1 " + data);
},1000);
return deferred.promise;
}
var asyncFn2 = function(data){
var deferred = $q.defer();
$timeout(function(){
console.log("Async fn2 " + data);
$scope.outputLines.push("Async fn2 " + data);
deferred.resolve("Async fn2 " + data);
},1000);
return deferred.promise;
}
asyncFn1(1)
.then(function(data){asyncFn2(data)})
.then(function(data){asyncFn2(data)})
.then(function(data){asyncFn2(data)});
}
Lorsque je l'exécute j'obtiens le résultat suivant:
Async fn1 1
Async fn2 Async fn1 1
Async fn2 undefined
Async fn2 undefined
Comment la chaîne de telle sorte que le troisième appel est le résultat de l'appel de la deuxième et de la quatrième obtient le résultat de la troisième?
J'ai créé un jsFiddle: http://jsfiddle.net/rhDyL/
Vous devez vous connecter pour publier un commentaire.
Extrait de la doc officielle sur $q:
Et pour la valeur de retour de la successCallack ou errorCallback, selon Dominique de diapositives:
Basée sur la définition, votre code est absent de la
return
mot-clé. Il devrait être comme suit: