【发布时间】:2021-12-31 13:23:10
【问题描述】:
我想从名为 Events 的 firestore 集合中获取 eventID 的值。我可以在我的应用程序中获取并显示我的 Firestore 集合中的所有事件,但我需要这个 eventID 来完成其他功能。
我是 TS 和 Angular 的新手,不明白为什么这不起作用
当我在 auth 函数中记录我的 userid 变量时,它可以正常工作并检索值,但如果我在函数之外这样做,它会给出未定义的结果。
此外,当我记录我为存储来自 firestore 的信息而创建的整个 eventList 变量时,它会记录所有信息,但如果我尝试检索任何内容,例如 this.eventList.eventID 或 this.eventList.title,它会记录未定义的信息。
我做错了什么?
这是我的代码:
import { Component,OnInit } from '@angular/core';
import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from '@angular/fire/compat/firestore';
import { Observable } from 'rxjs/Observable';
import { AuthService } from '../auth.service';
import { Router } from '@angular/router';
import { async } from '@firebase/util';
export class Tab1Page implements OnInit {
public eventList;
public userid;
constructor(private firestore: AngularFirestore, public fAuth: AuthService, public router: Router) {}
ngOnInit(){
this.fAuth.firebaseAuth.user.subscribe(res => {
this.userid = res.uid; //current logged in user id
//fetch only events logged in user created
this.firestore.collection('Events',ref=>ref.where("eventCreator","==",this.userid)).valueChanges().subscribe(event => {
this.eventList = event
console.log(this.eventList)//logs all the info from firestore
console.log(this.eventList.eventID)//logs undefined
console.log(this.userid)//logs the userid
});
});
console.log(this.userid)//logs undefined
}
}
【问题讨论】:
-
在上一个控制台中未定义它的原因是因为您设置它的代码是异步的。此外 - 从不嵌套订阅 - 非常糟糕的做法。您可能想了解一下 observables / RxJs 的工作原理。
标签: angular typescript firebase ionic-framework google-cloud-firestore