Firebase 9 deleteDoc 删除文档不起作用 - 未捕获的类型错误:无法读取 null 的属性(读取“名称”)

问题描述 投票:0回答:2

我使用 Firebase 9 作为我的小型实验应用程序的后端。我有两个集合,分别称为“玩家姓名”和“玩家”。 Playernames 集合有一个仅包含一个密钥的文档。 “Players”集合包含多个按 uid 的用户文档。每个用户文档都包含一个名为“集合”的子集合,其中仅包含一个文档。

在此,我实现了电子邮件/密码身份验证。

作为应用程序功能的一部分,我正在尝试删除用户。我编写了如下异步函数:

export const deleteUsersData = async (name) => {
  await updateDoc(doc(colRefPn, "unames"), { names: arrayRemove(name) });
  await deleteDoc(doc(db, "players", auth.currentUser.uid, "collections", "robodata"));
  await deleteDoc(doc(db, "players", auth.currentUser.uid)); //PROBLEM LINE

  try {
    await deleteUser(auth.currentUser);
  } catch {
    //Reauthenticate the user
    await reAuthenticateUser(); 
    await deleteUser(auth.currentUser);
  }
};

我在另一个文件中调用这个函数,如下所示:

deleteUsersData(currentUserData.name)
          .then(() => {
            Swal.fire("Account Deleted!", "Your account has been deleted. You have been signed out automatically.", "success");
            handleSignout();
          })
          .catch((ex) => {
            Swal.fire("Could not delete!", "There was an error deleting the user.", "error");
            console.error("There was an error deleting the user", ex.message);
          });

在上面的代码中,我使用 Sweetalert2 库来触发一些弹出窗口。

我已将上述代码中的行标记为“问题行”。这就是问题发生的地方。如果我评论这一行,一切都会很好。当然,players集合中的文档不会被删除,导致用户删除不完全。我完全遵循 Firbase 在其文档中指定的指导原则。我不明白为什么这一行在控制台中抛出以下错误。

我已在此处附加控制台日志文件以及我所看到的错误的一些屏幕截图。有人可以帮我解决我在这里缺少的东西吗? [一些截图](https://i.sstatic.net/P4nPW.png) 日志文件

我尝试使用 Firebase 规定的 API 删除用户。我预计用户集合会被删除。但是,那并没有发生。我收到错误。

控制台日志显示 currentUserData 的值:enter image description here 但是,问题不在于 currentUserData。这个问题在行:

await deleteDoc(doc(db, "players", auth.currentUser.uid));

我确实尝试删除用实际 uid 替换 auth.currentUser.uid 的文档(硬编码)。那也行不通。这就是 Firebase 文档所说的如何删除文档。不知道我做错了什么。

以下是 Firebase 的一些快照: 截图1 截图2

javascript firebase google-cloud-firestore
2个回答
0
投票

我通过消除 firebase 函数前面的

await
关键字解决了这个问题。对我来说,为什么这有效,而 Firebase 文档建议这些函数应该在
await
关键字后面使用,这是没有意义的。这是我的工作
deleteUsersData
函数的样子:

export const deleteUsersData = async (name) => {
  updateDoc(doc(colRefPn, "unames"), { names: arrayRemove(name) });
  deleteDoc(doc(db, "players", auth.currentUser.uid, "collections", "robodata"));
  deleteDoc(doc(db, "players", auth.currentUser.uid)); //PROBLEM LINE

  try {
    deleteUser(auth.currentUser);
  } catch {
    //Reauthenticate the user
    await reAuthenticateUser(); 
    deleteUser(auth.currentUser);
  }
};

我希望这可以帮助那些和我面临同样问题的人。我花了一天时间,把头发都扯下来了。


0
投票

我刚刚在删除文档时遇到了同样的问题! 删除等待解决了我的问题。 我不知道为什么会这样。

© www.soinside.com 2019 - 2024. All rights reserved.