Что ж, вы проявили творческий подход и решили проблему очень хорошо, но есть более эффективные способы сделать это.Я не знаю, хотите ли вы выполнять запросы параллельно или последовательно, но так как ваш код не предполагает, что три запроса являются зависимыми (второй берет данные из первого), я предоставлю параллельное решение, которое должно бытьбыстрее решить.
Использование combineLatest
import { combineLatest } from 'rxjs';
// returns promise of [value1, value2, value3]
return combineLatest(
this.afdb.list('firebaseref1').valueChanges().pipe(
map(data => {
return data.length;
}),
take(1),
),
this.afdb.object('firebaseref2').valueChanges().pipe(
take(1),
),
this.afdb.object('firebaseref3').valueChanges().pipe(
take(1),
),
).toPromise();
Или даже более простое (без кода) решение (с несколько иным возможным результатом):
import { combineLatest } from 'rxjs';
return combineLatest(
this.afdb.list('firebaseref1').valueChanges().pipe(
map(data => {
return data.length;
}),
),
this.afdb.object('firebaseref2').valueChanges(),
this.afdb.object('firebaseref3').valueChanges(),
).pipe(
take(1),
).toPromise();