所以我有一個情況我有一個未知長度的多個承諾鏈。我希望在處理完所有的CHAINS後執行一些操作。這甚至有可能嗎?這裏有一個例子:等待所有承諾,以解決
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);
});
在這個例子中,我設置了一個$q.all()
的承諾一,二,三將在一些隨機時間得到解決。然後我將承諾添加到一個和三個的結尾。我希望all
可以在所有鏈已解決時解決。下面是我運行此代碼時的輸出:
one done
one doneChained
two done
three done
ALL PROMISES RESOLVED
three doneChained
three doneChainedChained
有沒有辦法等待鏈的解決?
感謝您確認我最可怕的恐懼。現在我必須想出一個辦法讓最後的承諾大聲笑。 –
那有什麼問題?你的鏈是動態構建的嗎? – Bergi
準確地說我的問題。我試圖動態地創建一個承諾鏈,然後我想在鏈完成時做一些事情。 –