【发布时间】:2020-10-16 11:50:04
【问题描述】:
我希望有人可以帮助我解决这个问题。
我目前正在开展一个项目,我在该项目中使用 firebase 创建新用户。因此,当有人注册一个新用户时,firebase 会创建一个新用户,然后它会向 firestore 发送一个承诺,因此它可以在名为“users”的集合中创建一个新文档,这样我就可以访问一些用户数据,例如名称,姓氏和缩写。
我的问题是,当我注册一个新用户时,该帐户会立即在 firebase 中创建,但是使用 firestore 中的用户数据创建一个新文档需要很长时间。当我说很长时,我的意思是 10、20 分钟甚至更长。因此,在 firestore 决定创建新文档之前,会使用未定义的数据创建一个帐户。
描述的过程如下代码所示:
export const signUp = newUser => {
return (dispatch, getState, { getFirebase }) => {
const firebase = getFirebase()
const firestore = getFirebase().firestore()
firebase.auth().createUserWithEmailAndPassword(
newUser.email,
newUser.password
).then(resp => {
return firestore.collection('users').doc(resp.user.uid).set({
firstName: newUser.firstName,
lastName: newUser.lastName,
initials: newUser.firstName[0] + newUser.lastName[0]
}).then(() => {
dispatch({ type: 'SIGN_UP_SUCCESS' })
})
}).catch(err => {
dispatch({ type: 'SIGN_UP_FAIL', err })
})
}
}
我使用 redux-firestore 和 react-redux-firebase 作为依赖项将我的项目连接到 firebase。但这似乎不是问题,因为firestore可以无缝地用于项目的其他功能,例如在最终创建文档时向用户添加和删除新数据,或者当我尝试删除用户时,它也可以正常工作.
所以,如果有人能找到这个延迟的解释并帮助我克服这个问题,我会很高兴。
【问题讨论】:
-
在您的日志中显示文档创建发生在 10-20 分钟后?在您的代码中,您是否能够检查在创建用户时是否向 Firestore 发出了请求?我问这个是因为我怀疑这可能是其他事情,而不是 firestore,因为其他操作不会发生此问题,而且如果发出请求,firestore“决定”等待 20 分钟,这有点奇怪。
-
我正在向控制台记录一些消息,因此我可以检查何时检索到某些承诺。第一个是在我在第一个 THEN 方法中调用 firestore 之前,第二个是在第二个 THEN 方法中调度之前。因此,当我尝试注册时,第一条消息会立即出现在控制台中。第二条消息不会出现。它在 firebase auth 中创建一个新用户,检索响应,但是当我调用 firestore 时,它卡在那里并且暂时没有检索任何内容。我没有等到第二条消息,因为创建新文档需要很长时间。
-
如果我尝试按顺序创建两个新用户(创建第一个,注销,然后创建第二个),它可以工作。当我签署第二个用户时,它的文档会立即创建,然后第一个用户的文档会突然出现。
-
感谢您的回答。我可以接受这个 sn-p 并且它可以毫不拖延地工作。由于其他功能运行良好,代码中可能有其他内容阻止 Firestore 中的更新
-
我只是在学习如何做到这一点,而我的代码与您的代码完全相同,完全...按照您所做的相同教程进行操作,也许哈哈。无论如何,当我创建一个新用户时,我在另一个监视器上查看了我的数据库,新用户立即出现了。它必须是其他事情,而不是您在上面的操作代码中拥有的东西
标签: reactjs firebase google-cloud-firestore react-redux-firebase redux-firestore