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/

InformationsquelleAutor BoxerBucks | 2013-04-17