Получение данных из объекта Firebase с помощью Angular2, angularfire2 и Typescript
Im в настоящее время работает над проектом с Angular 2 и angularFire2. Моя база данных выглядит так в военнослужащих: база: / data
[{Name:test1},
{Name:test2},
{Name:test3}]
все элементы также имеют ключ Firebase.
теперь я пытаюсь получить данные из Firebase с помощью Observabels от RX. Когда я это делаю, я получаю имена в консоли:
let items= af.database.list('/data').map(i=>{return i});
items.forEach(i=>i.forEach(e=>(console.log(e.name))));
выход: test1, test2, test3. Все Работает.
но когда я делаю это:
console.log(items.first());
Я получаю FirebaseListObservable назад.
как я могу получить только первый объект из FirebaseListObservable? Как редактировать элементы списка? например:
items[0].name=test3
и как я могу получить ключ Firebase от элемента
как я могу получить firebaseKey из элемента в списке?
1 ответов
Observables
являются асинхронной структурой данных, что означает, что вы на самом деле не знаете, когда данные будут доступны, вы должны подписаться на Observable
и ждать, пока данные станут доступны в next
обработчик.
items.first().subscribe(x => console.log(x.name));
далее, an Observable
не является статическим, поэтому вы не можете индексировать его как таковой. Если вам нужен только первый элемент, я бы предложил вместо этого извлечь значение и изменить его с помощью flatMap
+ first
+ map
сочетание.
af.database.list('/data')
//Convert array into Observable and flatten it
.flatMap(list => list)
//Get only the first item in this list
.first()
//Transform the value
.map(({name, firebaseKey}) => ({name: "test3", firebaseKey}))
//Subscribe to the stream
.subscribe(x => console.log(x));