Фон
Я создаю приложение angularJS
У меня есть объект, называемый картой.Карта содержит массив идентификаторов преобразований.
Мне нужно выбрать каждое преобразование в массиве Карт, а затем сохранить его в массив преобразований вместо массива идентификаторов преобразований.Пока что я это сделал, за исключением вызова функции в правильное время.
Я хочу вызвать функцию: doStuffWithTransformArray
с использованием заполненного массива.
Вопрос
Как вызвать функцию только после завершения заполнения массива?
Текущий код (иногда это работает)
$scope.makeTransformArray = function () {
$scope.transforms = [];
$scope.map.transforms.forEach(function(eachTransformID, index) {
Transform.get({uuid: eachTransformID.uuid}, function(transformResult) {
$scope.transforms[index] = transformResult;
if ($scope.transforms.length == $scope.map.transforms.length) {
$scope.doStuffWithTransformArray($scope.transforms);
return;
}
});
});
}
Задача
Этот текущий код будет работать только после последнего последнего преобразования в массиве карты.
Он дважды вызовет doStuffWithTransformArray
, если массивзаполнено так: (5) [y, y, y, empty, y]
Четвертый еще не заполнен, но пятый завершен.
РЕДАКТИРОВАТЬ 1
Вот мой сервис преобразования:
angular.module('serviceregistryApp')
.factory('Transform', function ($resource) {
var url = 'api/v1/transform/:uuid';
return $resource(url, {transform: '@transform', uuid: '@uuid'}, {
'save': {method: 'POST', headers: {"Authorization": "ABC"}},
'delete': {method: 'DELETE', headers: {"Authorization": "ABC"}},
'post': {method: 'POST', headers: {"Authorization": "ABC"}},
'get': {
method: 'GET', isArray: false,
headers: {
"Authorization": "ABC"
}, url: "api/v1/transform/:uuid",
transformResponse: function (data) {
return JSON.parse(data);
}
}
});
});
РЕДАКТИРОВАТЬ 2
Как предполагается в комментариях, это работает, но я нахожу это несколько уродливым.
$scope.makeTransformArray = function () {
$scope.transforms = [];
var counter = 0;
$scope.map.transforms.forEach(function(eachTransformID, index) {
Transform.get({uuid: eachTransformID.uuid}, function(transformResult) {
$scope.transforms[index] = transformResult;
counter = counter + 1;
if (counter == $scope.map.transforms.length) {
$scope.doStuffWithTransformArray($scope.transforms);
return;
}
});
});
}