Я хочу иметь цикл for, который вызывает асинхронные функции для каждой итерации.
После цикла for я хочу выполнить другой блок кода, но не раньше, чем все предыдущие вызовы в цикле for были решены.
Моя проблема на данный момент заключается в том, что либо код-блок после цикла for выполняется до того, как все асинхронные вызовы закончены ИЛИ он вообще не выполнен.
Часть кода с циклом FOR и блоком кода после него (для полного кода см. fiddle):
[..]
function outerFunction($q, $scope) {
var defer = $q.defer();
readSome($q,$scope).then(function() {
var promise = writeSome($q, $scope.testArray[0])
for (var i=1; i < $scope.testArray.length; i++) {
promise = promise.then(
angular.bind(null, writeSome, $q, $scope.testArray[i])
);
}
// this must not be called before all calls in for-loop have finished
promise = promise.then(function() {
return writeSome($q, "finish").then(function() {
console.log("resolve");
// resolving here after everything has been done, yey!
defer.resolve();
});
});
});
return defer.promise;
}
Я создал jsFiddle, который можно найти здесь http://jsfiddle.net/riemersebastian/B43u6/3/.
В настоящий момент похоже, что порядок выполнения в порядке (см. вывод консоли).
Я предполагаю, что это просто потому, что каждый вызов функции немедленно возвращается без какой-либо реальной работы. Я попытался отложить defer.resolve с setTimeout, но не удалось (т.е. Последний блок кода никогда не выполнялся). Вы можете видеть это в разбитом блоке в скрипке.
Когда я использую реальные функции, которые записывают в файл и читают из файла, последний блок кода выполняется до завершения последней операции записи, чего я не хочу.
Конечно, ошибка может быть в одной из этих функций чтения/записи, но я хотел бы подтвердить, что нет ничего плохого в коде, который я разместил здесь.