12

我目前正在使用 Angular 2 和 angularFire2 进行项目。我的数据库在 Firebase 中看起来像这样:base:/data

[{Name:test1},
{Name:test2},
{Name:test3}]

所有项目也都有 Firebase 密钥。

现在我正在尝试使用来自 RX 的 Observabel 从 Firebase 中获取数据。当我这样做时,我会在控制台中获得名称:

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?

4

1 回答 1

16

Observables是一种异步数据结构,这意味着您实际上并不知道数据何时可用,您必须订阅Observable并等待数据在next处理程序中可用。

items.first().subscribe(x => console.log(x.name));

此外, anObservable不是静态的,因此您不能这样索引它。如果您只需要第一项,那么我建议您提取该值并使用 ++ 组合对其flatMap进行修改firstmap

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));
于 2016-07-08T19:14:57.100 回答