Я не могу найти действительное решение для следующего случая
Я хочу создать следующий цикл:
- ForEach элемент (A) массива
- Заполнить новый массив (B)
- Если ключ не существует в массиве (B), вызовите службу Firebase для получения данных
- Проверить данные и обновить статистику
- в конце всего (A) ключа сгенерируйте статистику выполнения и выставьте...
Мне нужно подождать и связать ответ данных Firebase, прежде чем продолжить цикл, и проблема в том, что мне нужно взаимодействовать с данными из firebase в основном цикле (поэтому я не могу реализовать его в подписке или затем)
Это часть кода, которую я хочу создать:
// Here i check if user exist in array (B)
let IDUtente = RifEvento.esisteUtente(Ordini.IDUtente) ;
// If not exists i'll get data from FIREBASE
if (IDUtente == -1) {
let NewUser = new TipoStatUtente() ;
NewUser.Chiave = Ordini.IDUtente ;
IDUtente = RifEvento.Utenti.push(NewUser) ;
IDUtente = IDUtente - 1 ;
// I NEED to wait the end of this function before continue with loop
this.statoUtente.getUser(IDUtente).then(dati => {
console.log('Sottoscritto dati utente') ;
let user : TipoSingoloUtente = dati ;
NewUser.sonoscuola = user.sonoscuola ;
if (!NewUser.sonoscuola) NewUser.Intestazione = user.Cognome + ' ' + user.Nome ; else NewUser.Intestazione = user.Scuola.Nome ;
if (NewUser.sonoscuola) RifEvento.NumScuole += 1 ; else RifEvento.NumUtenti += 1 ;
})
}
console.log(IDUtente) ;
// Utente Esiste aggiorno le sue statistiche
RifEvento.Utenti[IDUtente].Commissioni += Ordini.costoCommissione ;
RifEvento.Utenti[IDUtente].Incasso += Ordini.parziale ;
if (Ordini.Tipo == 'T') {
RifEvento.Utenti[IDUtente].NumTicket += Ordini.numbiglietti ;
} else {
RifEvento.Utenti[IDUtente].NumIscritti += 1 ;
RifEvento.Utenti[IDUtente].NumBallerini += Ordini.IDBallerini.length ;
}
}
А это функция:
getUser(IDUtente) : Promise<TipoSingoloUtente> {
return this.db.object('user/' + IDUtente).map(users => {
return users ;})
.first()
.toPromise(); }
for
? - person guest271314   schedule 14.10.2017