Warten Sie, bis alle Versprechen erfüllt sind
Ich habe also eine Situation, in der ich mehrere Versprechensketten von unbekannter Länge habe. Ich möchte, dass eine Aktion ausgeführt wird, wenn alle KETTEN verarbeitet wurden. Ist das überhaupt möglich? Hier ist ein Beispiel:
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);
});
In diesem Beispiel richte ich ein$q.all()
für die Versprechen eins, zwei und drei, die irgendwann gelöst werden. Ich füge dann Versprechungen an die Enden von eins und drei an. Ich will dasall
zu lösen, wenn alle Ketten aufgelöst wurden. Hier ist die Ausgabe, wenn ich diesen Code ausführe:
one done
one doneChained
two done
three done
ALL PROMISES RESOLVED
three doneChained
three doneChainedChained
Gibt es eine Möglichkeit zu warten, bis die Ketten aufgelöst sind?