我无法在角度的firestore中获得单个文档

尼古拉斯·HL

我目前正在做一个带有angular和firebase的项目,问题是,当我想在组件的console.log出现时获取单个文档时,我不确定。这是代码:

import { Injectable } from '@angular/core';
import {
  AngularFirestore,
  AngularFirestoreCollection,
  AngularFirestoreDocument,
} from '@angular/fire/firestore';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Product } from '../interfaces/Product';

@Injectable({
  providedIn: 'root',
})
export class ConexionService {
  private itemsCollection: AngularFirestoreCollection<Product>;
  private items: Observable<Product[]>;
    private itemDoc: AngularFirestoreDocument<Item>;

  constructor(private afs: AngularFirestore) {
    this.itemsCollection = afs.collection<Product>('Products');
    this.items = this.itemsCollection.snapshotChanges().pipe(
      map((actions) =>
        actions.map((a) => {
          const data = a.payload.doc.data() as Product;
          const id = a.payload.doc.id;
          return { id, ...data };
        })
      )
    );
  }

  listItem() {
    return this.items;
  }

  getOne(id: string): any {
    this.afs
      .collection<Product>('Products')
      .doc(id)
      .ref.get()
      .then((doc) => {
        if (doc.exists) {
          console.log(doc.data());
          return doc.data();
        } else {
          return 'Doc does not exits';
        }
      })
      .catch((err) => {
        console.error(err);
      });
  }
}

而这在组件中

constructor(private _service: ConexionService){
     console.log('from component-', this._service.getOne('data_1'));
}

这是控制台输出:

来自组件未定义

我认为问题在于该函数在选择Firebase数据之前已被调用,但是我不知道如何解决。

拉斐尔·莱莫斯(Rafael Lemos)

正如@DougStevenson在评论中所提到的那样,代码问题是缺少同步性,因为get()您正在执行的是异步操作,并且将console.log()在构造函数执行后返回,为了修复它,您将必须使用诸如在以下(未试用)示例中:

getOne(id: string): any {
    return this.afs
               .collection<Product>('Products')
               .doc(id)
               .ref
               .get()
               .then((doc) => {
                   if (doc.exists) {
                       console.log(doc.data());
                       return doc.data();
                   } else {
                       return 'Doc does not exits';
                   }
                })
                .catch((err) => {
                   console.error(err);
                });
}

constructor(private _service: ConexionService){
    this._service.getOne('data_1').then(value => {
        console.log('from component-', value);
    });
}

那么,这是怎么回事?方法get().then()内部getOne()表示一旦实现了诺言,将会发生什么,因此,如果then()在构造函数中调用a后调用它,它将getOne()在执行console.log之前同步运行之前,等待其中包含的诺言实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Firestore / Vuejs:无法从Firestore文档中删除

来自分类Dev

我无法获得正确的TD以角度显示

来自分类Dev

Firestore查询单个文档

来自分类Dev

为什么我无法在R Markdown文档中获得代码的颜色进行打印?

来自分类Dev

如何使用mongoose从单个文档中获得_id?

来自分类Dev

无法从角度服务中获得承诺结果

来自分类Dev

无法在订阅角度的ngoninit中获得价值

来自分类Dev

无法在Firestore中获取文档(React Native)

来自分类Dev

无法在 Firestore 中创建新文档

来自分类Dev

使用Flutter从Firebase Firestore查询中获取单个文档

来自分类Dev

在 Firestore 中创建文档时无法指定文档 ID

来自分类Dev

从Firestore在单个Vue组件中获取父文档和子文档数据

来自分类Dev

Firebase中的用户无法在Firestore中读取或写入自己的文档

来自分类Dev

我可以查询Firestore中嵌套文档中的字段吗?

来自分类Dev

我可以在单个查询中获得祖先元素吗?

来自分类Dev

如何从Cloud_Firestore获取单个文档数据到我的变量?

来自分类Dev

我无法在JavaFX中获得透明阶段

来自分类Dev

我无法在模拟中获得弹性

来自分类Dev

我无法在AngularJS中获得服务

来自分类Dev

我无法在Java中获得正确的算法

来自分类Dev

我无法在JavaFX中获得透明阶段

来自分类Dev

无法获取单个mongo文档

来自分类Dev

无法获得数组中的随机项目(角度10)

来自分类Dev

我可以在Firestore交易中遍历文档吗?

来自分类Dev

我在Firestore中无法收到消息

来自分类Dev

在Firestore中复制单个文档,并在新副本中编辑字段

来自分类Dev

firebase firestore以角度读取特定文档

来自分类Dev

如何在Firestore中获取单个文档并将其显示在站点上

来自分类Dev

Firestore根据orderBy和限制从集合中检索单个文档,而没有forEach

Related 相关文章

  1. 1

    Firestore / Vuejs:无法从Firestore文档中删除

  2. 2

    我无法获得正确的TD以角度显示

  3. 3

    Firestore查询单个文档

  4. 4

    为什么我无法在R Markdown文档中获得代码的颜色进行打印?

  5. 5

    如何使用mongoose从单个文档中获得_id?

  6. 6

    无法从角度服务中获得承诺结果

  7. 7

    无法在订阅角度的ngoninit中获得价值

  8. 8

    无法在Firestore中获取文档(React Native)

  9. 9

    无法在 Firestore 中创建新文档

  10. 10

    使用Flutter从Firebase Firestore查询中获取单个文档

  11. 11

    在 Firestore 中创建文档时无法指定文档 ID

  12. 12

    从Firestore在单个Vue组件中获取父文档和子文档数据

  13. 13

    Firebase中的用户无法在Firestore中读取或写入自己的文档

  14. 14

    我可以查询Firestore中嵌套文档中的字段吗?

  15. 15

    我可以在单个查询中获得祖先元素吗?

  16. 16

    如何从Cloud_Firestore获取单个文档数据到我的变量?

  17. 17

    我无法在JavaFX中获得透明阶段

  18. 18

    我无法在模拟中获得弹性

  19. 19

    我无法在AngularJS中获得服务

  20. 20

    我无法在Java中获得正确的算法

  21. 21

    我无法在JavaFX中获得透明阶段

  22. 22

    无法获取单个mongo文档

  23. 23

    无法获得数组中的随机项目(角度10)

  24. 24

    我可以在Firestore交易中遍历文档吗?

  25. 25

    我在Firestore中无法收到消息

  26. 26

    在Firestore中复制单个文档,并在新副本中编辑字段

  27. 27

    firebase firestore以角度读取特定文档

  28. 28

    如何在Firestore中获取单个文档并将其显示在站点上

  29. 29

    Firestore根据orderBy和限制从集合中检索单个文档,而没有forEach

热门标签

归档