Получение данных из объекта 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));