Я пытаюсь получить массив из разрешения UI-Router в AngularJS (используя Firebase).
Массив содержит членские взносы разных клубов. Сборы клубов меняются в разное время, поэтому в массив необходимо указать правильную плату за конкретный момент времени.
Клубы повторяются в цикле for.
Для каждого клуба:
Сначала для каждого клуба получаются временные диапазоны (асинхронно). Каждый временной диапазон - это объект, который показывает время, за которое была определенная плата (date_active и date_ends). Временные диапазоны по сути являются индексом для другой части базы данных, которая содержит сборы.
Правильный временной диапазон для текущей даты будет найден в пределах временных диапазонов (синхронно).
Затем используется правильный диапазон времени, чтобы получить плату за этот конкретный клуб за это конкретное время (асинхронно).
Я не уверен, как структурировать свои обещания в рамках этой функции разрешения, чтобы гарантировать, что массив платежей может быть создан и возвращен до загрузки состояния.
Я намеренно оставил в коде обработку всех обещаний $ q, так что ее будет легче вставить тому, кто знает лучше меня! Меня отбрасывают двойные асинхронные вызовы.
Большое спасибо!
.state('whatever')
resolve: {
'clubsResolve' : clubsResolve //Assume clubs have been loaded
'feeResolve': feeResolve
}
function feeResolve(clubs){
var allFees = [];
for(var i=0; i < clubs.length; i++){
(function(i){
var club = clubs[i];
var timeRanges = $firebaseArray(db.child.('timeRanges').child(club.name));
timeRanges.$loaded().then(function(){
//I have omitted the details of this function
var correctTimeRange = getCorrectTimeRange(timeRanges, new Date())
var fee = $firebaseObject(db.child(club.name).child(correctTimeRange.date_active));
fee.$loaded().then(function(){
allFees.push(fee);
})
})
})(i);
}
return allFees;
}