Vì vậy, tôi có một tình huống mà tôi có nhiều chuỗi lời hứa có độ dài không xác định. Tôi muốn một số hành động chạy khi tất cả CHUỖI đã được xử lý. Điều đó thậm chí có thể? Đây là một ví dụ:
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);
});
Trong ví dụ này, tôi thiết lập một $q.all()
cho các lời hứa một, hai và ba sẽ được giải quyết vào một thời điểm ngẫu nhiên nào đó. Sau đó, tôi thêm lời hứa vào phần cuối của một và ba. Tôi muốn all
giải quyết khi tất cả các chuỗi đã được giải quyết. Đây là kết quả khi tôi chạy mã này:
one done
one doneChained
two done
three done
ALL PROMISES RESOLVED
three doneChained
three doneChainedChained
Có cách nào để chờ các chuỗi giải quyết không?