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:方法不等待异步方法完成
删除 SwiftUI 后 Firebase Firestore 不更新 UI