首页 > 解决方案 > 当我 console.log 相同的数组时,我得到两个不同的值

问题描述

我有一个函数可以从我的 firstore 数据库中获取带有 id 的产品。当我 console.log 订阅中的数组时,我得到:

console.log(product[0]) -> Object { id: 0, quantity: 1, latinName: "stub", price: "10", name: "foo", }
console.log(product) -> [{ id: 0, quantity: 1, latinName: "stub", price: "10", name: "foo", }]

这很好而且很正常,但是当我在订阅之外执行 console.log 时。我想返回数组的地方我得到不同的值。然后我得到:

console.log(product[0]) -> undefined
console.log(product) -> [{ id: 0, quantity: 1, latinName: "stub", price: "10", name: "foo", }]

这是我获取数据并返回它的代码

   getProductfromDBByID(id: number): Observable<any> {
    let product: Array<any> = [];
    this.firestore
      .collection('products', (ref) => ref.where('id', '==', id))
      .get()
      .subscribe((querySnapshot) => {
        querySnapshot.forEach((doc) => {
          product.push(doc.data());
          console.log('product in subscribe ', product[0]);
        });
      });
    console.log('product return value', product[0]);
    return of(product);
  }

标签: arraysangulartypescript

解决方案


在函数名前添加“async”关键字,在future方法前添加“await”关键字,即“this.firestore......”

async getProductfromDBByID(id: number): Observable<any> {
    let product: Array<any> = [];
    await this.firestore
      .collection('products', (ref) => ref.where('id', '==', id))
      .get()
      .subscribe((querySnapshot) => {
        querySnapshot.forEach((doc) => {
          product.push(doc.data());
          console.log('product in subscribe ', product[0]);
        });
      });
    console.log('product return value', product[0]);
    return of(product);
  }

推荐阅读