【问题标题】:Delay in Firestore to create a new document in the users collectionFirestore 延迟在用户集合中创建新文档
【发布时间】: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


【解决方案1】:

我相信您正在关注 The Net Ninja 的系列(我也是)。如果您完全按照他的做法(here),它将起作用。我个人将您和我的实现与他的不同,唯一不同的是分号。尝试在每行后添加分号。也许 Promise 的链接让编译器感到困惑?

注册后还是不行,然后反复退出。每次退出后都需要刷新。

【讨论】:

  • 嘿。是的,我遵循了网络忍者教程。我使用他的教程作为这个项目的参考。我按照您的建议在每行末尾添加了一些分号,但我仍然遇到同样的问题。这真的很奇怪,因为我在处理 firebase 时确实遵循了教程。然后我更新了firebase,将语法更改为新的,但什么也没做。也许这是我的反应版本,因为我仍然收到警告,它与一些反应更新和异步代码有关。
【解决方案2】:

一段时间后,我意识到问题不在于代码或 firebase。问题在于它本身的项目结构。

为了解决这个问题,我需要摆脱

"@testing-library/jest-dom"
"@testing-library/react"
"@testing-library/user-event"

在 package.json 中。然后再次安装依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-10
    • 2021-12-09
    • 1970-01-01
    • 2021-02-20
    • 2018-10-29
    • 2021-04-02
    • 2020-08-25
    • 2021-05-12
    相关资源
    最近更新 更多