Я пытаюсь перебрать массив объектов (сообщений). Внутри цикла находится запрос к базе данных geofire (gf.get()). Он извлекает местоположение gps определенного ключа. Затем данные переносятся в массив.Итерация через массив объектов с использованием геофир и firebase
var posts = PostsData.getPosts();
$scope.$watch($scope.active, function() {
$timeout(function() {
var markers = [];
for (var key in posts) {
var post = posts[key];
if (posts.hasOwnProperty(key) && posts[key]!=null) {
gf.get(key).then(function(location) {
console.log(post.title);
console.log(key);
markers.push({
idKey: key,
title: post.title,
coords: {
latitude: location[0],
longitude: location[1]
}
})
})
$scope.markers = markers;
}
}
})
})
Выход из следующего кода ....
console.log(post.title);
console.log(key);
тот же ключ и титул снова и снова, что не является представителем плюсов данных " сообщений "(ключ и названия уникальны).
Я считаю, что моя проблема связана с плохим пониманием асинхронного вызова, обещаний и т.д.
Любая помощь будет оценена.
Спасибо! Я пробовал код, но я все еще получаю ту же проблему. Если я console.log (post.title) после «var p = gf.get (key) .then (function (location) {», я все равно получаю повторяющиеся данные. –
Конечно, см. Мой ответ в http: // stackoverflow .com/a/30180679/1348195 –
Спасибо за помощь! Я прочитал ваш ответ, но мне все еще сложно понять это. Функция get (key) возвращает обещание. Я понимаю, что «get» должен закончите раньше. Затем запускается. Поэтому у меня не должно быть проблем с повторяющимися данными. –