Firestore 的异步功能不会加载我的数据

Posted

技术标签:

【中文标题】Firestore 的异步功能不会加载我的数据【英文标题】:Async function with Firestore does not load my data 【发布时间】:2020-03-22 20:46:03 【问题描述】:

在我的 nOnInit 页面上,我使用异步函数从 firebase 加载一些数据(通常异步函数等待从 firebase 获取所有数据),所以这个工作正常,我在我的对象 @987654322 中获取了我的数据@

async ngOnInit() 
    this.getDocu = await this.Help.getLastTime('JOURNALIER', 'Le Mat', 'lastTime', 'lastTime');
    this.loadItems();

然后,在此页面中,用户填写一些问题,我将结果保存在 firebase 中的同一文档(更新)中,当我回到页面时,我运行 ionViewWillEnter 以重新加载更新的数据并显示它在我的页面上。

async ionViewWillEnter() 
    this.getDocu = await this.Help.getLastTime('JOURNALIER', 'Le Mat', 'lastTime', 'lastTime');
    this.loadItems();
 

这是我的getLastTime 函数:

async getLastTime(collectionName: string, user: string, collec: string, docu: string) 
    const docRef = this.afs.firestore.collection(collectionName).doc(user).collection(collec).doc(docu);
    const doc = await docRef.get();
    if (doc.exists) 
            this.getDocu = doc.data();
         else 
            this.getDocu = 'Never done';
        
    return this.getDocu;
  

但是当我控制台记录ionViewWillEnter的结果时,我没有加载更新的数据,或者如果我手动重新加载页面,这次是ngOnInit运行并获得更新的值......

对我来说很奇怪,因为看起来我使用相同的方法来获取值......但结果不同......

【问题讨论】:

当你进入时,ngOnInit + ionViewWillEnter 会执行。通过从 ngOnInit 中删除功能来干燥 所以我在 ngOnInit 里面什么都没放?我试过它给出了相同的结果.. 【参考方案1】:

使用.valueChanges().snapShotChanges() 而不是.get()。您可以订阅前一种方法,这使得调用像ionViewWillEnter() 这样的查询已经过时。值更新后,您将自动再次收到这些值。

重写getLastTime()(假设它在服务firebaseService中)返回一个Observable:

getLastTime(collectionName: string, user: string, collec: string, docu: string) 
    return this.afs.collection(collectionName).doc(user).collection(collec).doc(docu).valueChanges();
  

在您的组件中,订阅getLastTime()

this.firebaseService.getLastTime(....).subscribe(res => 
 if (!res) 
   console.log("never done");
);

【讨论】:

谢谢,但.valueChanges().snapShotChanges()不存在.. 你在使用 Angularfire 吗?你能分享你的服务(尤其是this.afs)吗? 是的。 private afs: AngularFirestore 我编辑了getLastTime函数,能否确认.valueChanges()仍然不可用? 从 getLastTime() 中移除异步

以上是关于Firestore 的异步功能不会加载我的数据的主要内容,如果未能解决你的问题,请参考以下文章

从 Firestore 异步调用填充 RecyclerView

Firestore,Flutter,Async:方法不等待异步方法完成

将 Firestore 数据加载到 json 中

删除 SwiftUI 后 Firebase Firestore 不更新 UI

计划的 Firebase 功能 - 不写入 Firestore

Firebase 云功能不发送异步推送通知