Я здание ионного проекта, где пользователи могут играть тур (которого данные из API)Проблем с угловым Еогеаспом ждет HTTP вызывают
Каждого тура имеет некоторое количество частей, которые могут играть пользователи в определенную точку на карте. Это приложение должно быть 100% -ным офлайн-приложением, поэтому, когда пользователь вводит код тура, данные должны быть извлечены из API до того, как пользователь сможет продолжить (так что приложение поместит все данные тура в автономном режиме). Каждая часть имеет изображение, видео, аудио, которое загружается в начале приложения.
Проблема в том, что вызов функции, который загружает все данные, не является синхронным. В console.log говорится, что функция уже заканчивается перед загрузкой всех данных. Куски кода ниже:
function getAndFillFullTour() {
vm.showLoader = true;
// load data
TourFactory.getFullTour(vm.tourData.number, function(data){
if(data.state == 'success'){
vm.tourData = data;
var test = downloadData(function(){
// hide loader and continue tour
});
} else {
console.log('error');
}
});
}
Эта функция вызывает завод, который получает полный тур, включая пути изображений каждой части, которая необходима, чтобы загрузить на устройство пользователей. Функция downloadData является следующей функцией:
function downloadData(callback) {
angular.forEach(vm.tourData.parts, function(value, key){
var part = value;
var i = key;
if(part.image !== "") {
TourFactory.getPartImage(part, tourId, function(data){
vm.tourData.parts[i].partImage = data;
console.log('executed with picture ' + i);
});
}
});
if(callback)
callback();
}
К сожалению, forloop сам выполняет синхронным, но не ждет завод вызова завершить. Я попробовал много альтернатив с обещаниями, но без везения. Может ли кто-нибудь помочь? Мне нужно дождаться завершения http-вызова, чтобы получить ответ от вызова downloadData.
getPartImage() - всего лишь пример, для каждого цикла есть пять таких функций, которые должны быть заполнены первым, прежде чем я получу ответ в вызове downloadData.
['forEach' ничего не ждет] (http://stackoverflow.com/a/37576787/1048572). – Bergi
Пожалуйста, покажите нам свои попытки использовать обещания. – Bergi