Firebase 5.0 RTD查询数据

时间:2018-02-12 15:51:38

标签: typescript firebase firebase-realtime-database angularfire2

我只是试图将我的RTD中的所有数据都放到一个数组中进行迭代。以下代码返回一个未定义的,我缺少什么?

export class AppComponent {
  cuisines$: Observable<any[]>;
  cuisines: any[];

  constructor(private db: AngularFireDatabase) {
    this.cuisines$ = db.list('/cuisines').valueChanges();
    this.cuisines$.subscribe(x => this.cuisines = x);
    console.log(this.cuisines);
  }
}

更新:我切换到Cloud Firestore,以下代码返回我的数组。也许Cloud Firestore是最佳选择!

export class AppComponent {
  items: any[];
  items$: Observable<any[]>;

  constructor(private db: AngularFirestore) {
    this.items$ = db.collection('items').valueChanges();
    this.items$.subscribe(x => {
      this.items = x;
      console.log(this.items);
    });
  }
}

Firebase Cloudstore

2 个答案:

答案 0 :(得分:0)

您缺少执行顺序。 您的console.log在上一次分配后立即执行。在订阅将提供任何结果之前需要一些时间。

将你的console.log移到subscribe:

this.cuisines$.subscribe(x =>{
this.cuisines = x;
console.log(this.cuisines); // recieved snapshot
this.cuisines.forEach(i=>console.log(i)); //items themselves
});

答案 1 :(得分:0)

constructor(private db: AngularFireDatabase) {
    this.cuisines$ = db.list('/cuisines').snapshotChanges();
    this.cuisines$.subscribe(x => {
        this.cuisines = x;
        console.log(this.cuisines);
    }); 
}