Jadi saya memiliki situasi di mana saya memiliki banyak rantai janji dengan panjang yang tidak diketahui. Saya ingin beberapa tindakan dijalankan ketika semua CHAINS telah diproses. Apakah itu mungkin? Berikut ini contohnya:
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);
});
Dalam contoh ini, saya menyiapkan $q.all()
untuk promise satu, dua, dan tiga yang akan diselesaikan pada waktu acak. Saya kemudian menambahkan janji di akhir satu dan tiga. Saya ingin all
menyelesaikan ketika semua rantai telah diselesaikan. Berikut adalah outputnya ketika saya menjalankan kode ini:
one done
one doneChained
two done
three done
ALL PROMISES RESOLVED
three doneChained
three doneChainedChained
Apakah ada cara untuk menunggu rantai itu terpecahkan?