Вы можете использовать обещание, возвращаемые таймауты и с комбинацией $q.all
(инъекционные $q) вы можете достичь этого.
Пример: -
var promises = [];
for (var i = 0; i < 1000; i++) {
promises.push(performTask(i)); //push promise to the array
}
//If in your real case i is actually an array of something then you can
//just simplify it to $q.all(myArrayOfInputs.map(performTask)).then(...)
$q.all(promises).then(performDoneTask); //use q.all to wait for all promises to be fulfilled.
//Method that does something once all the timeouts are completed
function performDoneTask(){
}
//Method that does something with i and returns a promise from the timeout
function performTask(i){
return $timeout(function() {
//do sth
}, 100);
}
Я не могу думать о родном решении, но это очень легко реализовать какой-то менеджера асинхронным, где каждый вызов метода запуска (вызывается при установке таймер) увеличивает счетчик, и каждый вызов метода останова (вызываемый при завершении работы асинхронной функции) уменьшает его. Окончательный ответ можно вызвать, когда счетчик вернется к 0. – doldt