reactjs - 我正在调用 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),
});
}
}
};
解决方案
您不需要等待 docs.data()。
但我建议使用数据库规则进行此类验证,并将您的更新调用置于 try catch 中。这样就没有人可以添加错误的数据,如果你自己尝试它也不会被保存。
我不知道您的用例,但可能只是允许用户创建数据并禁止编辑和删除。还允许他们仅在作为用户 uid 的 uid 下添加。如果他们可以自行删除它们,您可以让他们删除数据。
推荐阅读
- android - 从firebase获取纬度和经度值
- android - 如何保护 AWS 的键值
- vim - DECSET SGR 1006 中鼠标滚轮左/右的按钮代码是什么?
- c# - 依赖属性未显示在属性窗格中
- html - 如何增加拨动开关的宽度
- vba - Excel查找和替换值宏或vlookup
- ruby-on-rails - 使用 HTTParty 将时间转换为可消化的 JSON 字符串
- android - 如何获取节点名称以 kpk 开头的所有值,仅输出一个字符串
- enums - Swift 到 Kotlin:枚举
- c# - 将现有的代码优先模型和流畅的 API 配置从 Entity Framework 6 移植到 Entity Framework Core 2.0