그래서 길이를 알 수없는 약속 체인이 여러 개있는 상황이 있습니다. 모든 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()
에서는 임의의 시간에 해결 될 약속 1, 2, 3에 대한 a 를 설정했습니다 . 그런 다음 1과 3의 끝에 약속을 추가합니다. all
모든 체인이 해결되면 해결 하기 를 원합니다 . 이 코드를 실행할 때의 출력은 다음과 같습니다.
one done
one doneChained
two done
three done
ALL PROMISES RESOLVED
three doneChained
three doneChainedChained
체인이 해결 될 때까지 기다리는 방법이 있습니까?