【问题标题】:Firebase 5.0 RTD querying dataFirebase 5.0 RTD 查询数据
【发布时间】:2018-07-22 20:27:19
【问题描述】:

我只是想将 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);
    });
  }
}

【问题讨论】:

    标签: typescript firebase firebase-realtime-database angularfire2


    【解决方案1】:

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

    将你的 console.log 移到订阅中:

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

    【讨论】:

    • 我也试过这样,但我没有得到项目本身的列表imgur.com/a/9MUPs
    • 你必须遍历它们
    【解决方案2】:
    constructor(private db: AngularFireDatabase) {
        this.cuisines$ = db.list('/cuisines').snapshotChanges();
        this.cuisines$.subscribe(x => {
            this.cuisines = x;
            console.log(this.cuisines);
        }); 
    }
    

    【讨论】:

    • 代码应附有书面说明,说明如何解决 OP 中的问题。
    猜你喜欢
    • 2019-01-03
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2017-08-22
    • 2017-11-24
    • 2019-07-28
    相关资源
    最近更新 更多