首页 > 解决方案 > 如何在 Firebase 中使用 onSnapshot?无法在我的应用中运行

问题描述

我制作了自己的网络应用程序(使用 vue.js)并使用 firestore 作为后端。在我的 firebase 方法中,我尝试在 firestore 中使用 onSnapshot 方法,但结果未定义。

firebase 版本是最新的(v9)。

所以我的代码在下面。

let user;
    const snapshot = await onSnapshot(collection(db, "user"), (snap: any) => {
      let user: any = [];
      snap.docs.forEach((doc: any) => {
        user.push({ ...doc.data() });
      });
      return user;
    });
    snapshot();
    console.log(user);

我的 Firestore 数据很简单,如下所示。

collection: user
documet: uid(automatically made by firebase)
data:{
 name:'someone name',
 age:22
}

所以我期待这样的结果

{
 name:'someone name',
 age:22
}

但结果是“未定义”有人给我建议吗?

标签: javascriptfirebasevue.jsgoogle-cloud-firestore

解决方案


onSnapshot函数不返回 a Promise,因此您不能await在其上使用。您正在寻找的是getDoc

const snap = await getDocs(collection(db, "user"));
let user: any = [];
snap.docs.forEach((doc: any) => {
  user.push({ ...doc.data() });
});
console.log(user);

另请参阅 Firebase 文档,了解一次获取文档


推荐阅读