如何在其他请求之后构建提取请求



我有一个React博客,我使用Firebase作为后端。我使用createUserWithEmailAndPassword方法,在身份验证后,用户被重定向到博客,在那里他们可以开始添加博客。

我把他们的帖子存放在一个消防仓库的收藏品里;帖子";。没问题。

我还希望在登录后使用用户首选项创建一个用户对象。假设每个人都选择了一个特定的主题。

我创建了一个名为";用户";在firestore中,我将使用addDoc方法存储每个ones对象{user: "random@hotmail.com, theme: "dark" ,isAdmin: false, etc}

我希望这个对象只创建一次,而不是每次用户登录时都创建

如何检查";用户";集合(如果用户已经存在(?

我得到集合getDocs(userCollectionRef(,然后通过一个属性来过滤数据,看看那里是否有那个对象。

如果没有,我想使用addDoc方法添加文档。

这是请求:

useEffect(() => {
const createUserData = async () => {
const data = await getDocs(usersCollectionRef);
const docs = data.docs.map((doc) => ({
...doc.data(),
id: doc.id,
}));
const userData = docs.filter((doc) => doc.user === user.email);
if (userData.length === 0) {
await addDoc(usersCollectionRef, {
user: user.email,
isAdmin: false,
theme: "dark",
});
}
};
if (user) {
createUserData();
}
}, [user, usersCollectionRef]);

我好像在努力同时检查并添加到集合中,这就是它不起作用的原因。

有什么想法吗?

我是否应该有一个中间步骤,将从getDocs获得的内容存储在一个状态或其他状态,然后进行第二个请求?

有人能解释一下吗?

我把if语句改成了这样的return,它起了作用。

return (
userData.length === 0 &&
(await addDoc(usersCollectionRef, {
user: user.email,
wordGoal: wordGoal,
}))
);

我想我会在第一个承诺之后返回第二个承诺,这就是的原因

我想,当getDocs请求发生时,因为它是异步的,所以数据是空的,然后代码转到if语句,此时该语句为true(我们没有记录(,因此执行它。

最新更新