javascript 用于删除文档的Firebase 9 deleteDoc不工作-未捕获类型错误:无法读取null的属性(阅读“name”)

1tu0hz3e  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(110)

我正在使用Firebase 9作为我的小型实验应用程序的后端。我有两个集合,分别称为"Playernames"和"Players"。Playernames集合有一个文档,该文档只包含一个键。"Players"集合包含多个用户文档,每个用户文档包含一个子集合,称为"collections",该子集合只包含一个文档。
在此基础上,我实现了电子邮件/密码身份验证。
应用程序功能的一部分,我试图删除用户。我写了异步函数如下:

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库来触发一些弹出窗口。
我已经在上面的代码中将该行标记为"问题行"。这就是问题发生的地方。如果我注解该行,一切都正常。当然,玩家集合中的文档不会被删除,导致用户删除不完全。我完全按照Firbase在他们的文档中指定的指导方针操作。我不明白为什么该行在控制台中抛出以下错误。
我在此附上了控制台日志文件和一些屏幕截图,说明我所看到的错误。有人能帮我找出此处遗漏的内容吗?[a few screenshots](https://i.stack.imgur.com/P4nPW.pngLogFile
我尝试使用Firebase规定的API删除用户。我希望用户集合会被删除。但是,没有发生。我得到了错误。
显示currentUserData值的控制台日志:

但是,问题不在于currentUserData。

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

我确实尝试删除文档,将auth. currentuser. uid替换为实际的uid(硬编码)。这也不起作用。这是Firebase文档所说的如何删除文档。不确定我做错了什么。
以下是firebase的一些快照:Screenshot 1Screenshot 2

lhcgjxsq

lhcgjxsq1#

我通过删除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);
  }
};

我希望这能帮助那些和我面临同样问题的人。我花了一天的时间在这上面,扯掉了我的头发。

相关问题