Warten Sie, bis alle Versprechen zu lösen

Also ich habe eine situation, wo ich mehrere Versprechen Ketten von einer Länge unbekannt ist. Ich möchte eine Aktion ausführen, 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 habe ich ein $q.all() für verspricht eins, zwei, und drei, die aufgelöst wird zu einem zufälligen Zeitpunkt. Ich habe dann fügen Sie verspricht, auf die enden der eins und drei. Ich will die all zu lösen, wenn alle Ketten wurden gelöst. Hier ist die Ausgabe, wenn ich diesen code ausführen:

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 zu lösen?

InformationsquelleAutor jensengar | 2014-02-13

Schreibe einen Kommentar