2014-09-17 2 views
1

La fonction one transmet la valeur à two, puis two transmet la valeur à three. Chacune de ces fonctions peut prendre un certain temps pour renvoyer des données. Comment puis-je les faire attendre pour la valeur au lieu de se précipiter et d'imprimer undefined.AngularJS: chaîne Seqential Promise

var deferred = $q.defer(); 

var one = function (msg) { 
    $timeout(function() { 
    console.log(msg); 
    return "pass this to two"; 
    }, 2000); 
}; 

var two = function (msg) { 
    console.log(msg); 
    return "pass this to three"; 
}; 

var three = function (msg) { 
    console.log(msg); 
}; 

deferred.promise 
    .then(one) 
    .then(two) 
    .then(three); 

deferred.resolve("pass this to one"); 

Répondre

3

Vous devez return une promesse de toutes les fonctions qui fait quelque chose asynchrone.

Dans votre cas, votre fonction one retourne undefined, alors qu'il aurait besoin de retourner la promesse que vous avez créé pour la valeur "pass this to two" après le délai d'attente:

function one (msg) { 
    return $timeout(function() { 
//^^^^^^ 
    console.log(msg); 
    return "pass this to two"; 
    }, 2000); 
} 

BTW, au lieu d'utiliser var deferred = $q.defer();, la chaîne est mieux écrit comme:

one("pass this to one") 
    .then(two) 
    .then(three); 
+0

Fonctionne bien. Merci. –

Questions connexes