AngularFire2文档snapshotChanges返回未定义

时间:2018-07-07 22:57:04

标签: javascript firebase rxjs google-cloud-firestore angularfire2

我创建了路由器防护,该防护首先获取经过身份验证的用户的ID,然后根据来自Firestore的用户ID获得值,但是当我记录从Firestore返回的数据时,其未定义(存在:false)。这是我的代码

project.guard.ts

export class ProjectGuard implements CanActivate {

item: Observable<any>;

constructor(
  private auth: AuthService,
  private afs: AngularFirestore,
) { }
canActivate(
  next: ActivatedRouteSnapshot,
  state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

this.item = this.afs.collection("project").doc(next.paramMap.get('pid')).snapshotChanges();

return this.auth.user.pipe(take(1), switchMap(u => {
  return this.item.pipe(
    take(1),
    map(data => {
      console.log(data)
      console.log("Hello: " + u.uid + " data: " + data.payload.doc.data());
      return true;
    }),
  );
})
)}

我收到此错误

  

错误错误:未捕获(承诺):TypeError:无法读取未定义的属性'data'

enter image description here

您是否知道为什么未定义?当我尝试保证它有效时...

承诺

this.afs.collection("project").doc(next.paramMap.get('pid')).ref.get()

但是对于snapshotChanges()valueChanges()来说,它不起作用。我还尝试了简单的非嵌套管道。你有什么主意吗?谢谢

1 个答案:

答案 0 :(得分:0)

您尝试调用data.payload.doc.data(),但是如果查看console.log(data)的输出,您会发现它不包含任何data.payload.doc属性。

data.payload,但没有data.payload.doc