Entonces tengo una situación en la que tengo múltiples cadenas de promesas de longitud desconocida. Quiero que se ejecute alguna acción cuando se hayan procesado todas las CADENAS. ¿Es eso siquiera posible? Aquí hay un ejemplo:
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);
});
En este ejemplo, configuro una $q.all()
para las promesas uno, dos y tres que se resolverán en algún momento aleatorio. Luego agrego promesas en los extremos de uno y tres. Quiero all
que se resuelva cuando se hayan resuelto todas las cadenas. Aquí está la salida cuando ejecuto este código:
one done
one doneChained
two done
three done
ALL PROMISES RESOLVED
three doneChained
three doneChainedChained
¿Hay alguna forma de esperar a que se resuelvan las cadenas?