Я новичок в Angular и RxJS и действительно борюсь со следующей проблемой.
У меня есть следующая структура базы данных Firebase в реальном времени:
-States
- AZ
-Flagstaff
-ar
-0
-name: "Default"
-amount: 100
...
-1
-name: "Alt 1"
-amount: 200
...
-Phoenix
-ar
-0
-name: "Default"
-amount: 150
-1
-name: "Alt 1"
-amount: 200
- CA
-Anaheim_Hills
...
Я пытаюсь создать службу Angular, которая будет тянуть ссылку для узла состояний (например, AZ), перебирать дерево объектов, выбирать определенные элементы, выполнять некоторые манипуляции и возвращать простой массив следующих объектов:
interface Jurisdiction {
path: string; //eg '/States/AZ/Flagstaff'
name: string;
categories: [{
path: string; //eg '/States/AZ/Flagstaff/ar/0'
name: string; // eg 'Default'
}];
}
Я соединил следующий метод на основе того, что нашел в Интернете, но, похоже, take(1)
больше не является методом Observable. Я также не уверен, как обеспечить выполнение асинхронной функции обхода до того, как метод возвратит массив Jurisdiction []
.
getJurisdictions(state: string): Jurisdiction[] {
let ret: Jurisdiction[];
const statePath = '/States/' + state;
this.stateRef = this.db.list(statePath);
const s = this.stateRef.snapshotChanges().take(1).toPromise().then(snaps => {
snaps.forEach(snap => {
let jur: Jurisdiction;
jur.path = statePath + '/' + snap.key;
jur.name = snap.key.replace('_', ' ');
snap.payload.forEach(snap2 => {
let cat: {
path: string;
name: string;
};
cat.path = jur.path + '/' + 'SUB PATH PLACEHOLDER eg Flagstaff/ar/0';
cat.name = 'NAME PLACEHOLDER';
jur.categories.push(cat);
return true;
});
ret.push(jur);
});
});
return ret;
}