首页 > 解决方案 > 我正在调用 Firestore 代码的动作创建者

问题描述

registeredUsers第一次得到空的数组。要注册用户,我想检查用户是否已注册。但是当我调用这个函数时,没有数据加起来。

这是图像:

在此处输入图像描述

这是代码:

export const userRegister = (user, programId) => async (dispatch) => {
  const data = {
    displayName: user.displayName,
    email: user.email,
    joinedAt: Date.now(),
    uid: user.uid,
  };
  // await console.log(data, programId);

  const docs = await db.collection("programs").doc(programId).get();
  const program = await docs.data();
    
  for (let i = 0; i < program.registeredUsers.length; i++) {
    if (user.uid !== program.registeredUsers[i].uid) {
      await db
      .collection("programs")
      .doc(programId)
      .update({
        registeredUsers: firebase.firestore.FieldValue.arrayUnion(data),
      });
    }
  }
};

标签: reactjsfirebasereduxgoogle-cloud-firestore

解决方案


您不需要等待 docs.data()。

但我建议使用数据库规则进行此类验证,并将您的更新调用置于 try catch 中。这样就没有人可以添加错误的数据,如果你自己尝试它也不会被保存。

我不知道您的用例,但可能只是允许用户创建数据并禁止编辑和删除。还允许他们仅在作为用户 uid 的 uid 下添加。如果他们可以自行删除它们,您可以让他们删除数据。


推荐阅读