J'ai donc une situation où j'ai plusieurs chaînes de promesses d'une longueur inconnue. Je veux qu'une action s'exécute lorsque toutes les CHAÎNES ont été traitées. Est-ce que c'est possible? Voici un exemple:
app.controller('MainCtrl', function($scope, $q, $timeout) {
var one = $q.defer();
var two = $q.defer();
var three = $q.defer();
var all = $q.all([one.promise, two.promise, three.promise]);
all.then(allSuccess);
function success(data) {
console.log(data);
return data + "Chained";
}
function allSuccess(){
console.log("ALL PROMISES RESOLVED")
}
one.promise.then(success).then(success);
two.promise.then(success);
three.promise.then(success).then(success).then(success);
$timeout(function () {
one.resolve("one done");
}, Math.random() * 1000);
$timeout(function () {
two.resolve("two done");
}, Math.random() * 1000);
$timeout(function () {
three.resolve("three done");
}, Math.random() * 1000);
});
Dans cet exemple, j'ai mis en place un $q.all()
pour les promesses un, deux et trois qui seront résolues à un moment aléatoire. J'ajoute ensuite des promesses aux extrémités de un et de trois. Je veux que le all
se résolve lorsque toutes les chaînes ont été résolues. Voici la sortie lorsque j'exécute ce code:
one done
one doneChained
two done
three done
ALL PROMISES RESOLVED
three doneChained
three doneChainedChained
Existe-t-il un moyen d'attendre que les chaînes se résolvent?