Я хочу мати цикл for, який викликає асинхронні функції на кожній ітерації.
Після циклу for я хочу виконати ще один блок коду, але не раніше, ніж всі попередні виклики у циклі for будуть вирішені.
Моя проблема на даний момент полягає в тому, що або код-блок після циклу for виконується до того, як всі асинхронні виклики закінчаться, або він взагалі не виконується.
Частина коду з циклом FOR та блоком коду після нього (повний код див. У скрипті ):
[..]
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, але не вдалося (тобто останній блок коду ніколи не виконувався). Ви можете побачити це в закомментованому блоці в скрипці.
Коли я використовую реальні функції, які записують у файл і читають з файлу, останній блок коду виконується до завершення останньої операції запису, що не те, що я хочу.
Звичайно, помилка може бути в одній із цих функцій читання / запису, але я хотів би переконатися, що в коді, який я розмістив тут, немає нічого поганого.