首页 > 解决方案 > Firestore 认为我离线,即使我不在

问题描述

我正在尝试使用 Firebase 为我的应用配置 Google 登录。我正在使用signInWithPopup身份验证流程。成功登录后,如果是新用户,我想在 Firestore 中设置一个新文档并在 DynamoDB 中创建一个新项目。

    auth.signInWithPopup(provider) /* ----------------> Creates a user instantly. I verified it in the Firebase Console. */
    .then((value) => {
      const isNewUser = value.additionalUserInfo.isNewUser;
      if (isNewUser) {
        console.log("This is a new User.")

        const reference = firestore.collection('users').doc(value.user.uid);

        reference.set({ /* ----------------> Doesn't create a document until I disconnect and reconnect my Internet. */
          firstName: "",
          lastName: "",
          emailAddress: value.user.email,
          organisation: "",
          designation: "",
        })

        putTasks(value.user.uid, []) /* ----------------> Creates a new Document in DynamoDB instantly. */

一旦用户登录,就会在 Firebase 控制台中创建一个新用户。还会在 DynamoDB 中创建一个新文档。但是,在我断开并重新连接互联网连接之前,不会在 Firestore 服务器上创建用户的新文档。我没有启用持久性。出于某种原因,即使我不在,firestore 也会认为我处于离线状态。

有人可以告诉我为什么会这样吗?

标签: javascriptgoogle-cloud-firestorefirebase-authentication

解决方案


这个错误很奇怪,但是我想我可以给你一个提示。这可能与set 方法是异步的并且您没有等待它的事实有关。也许这个动作以某种方式被缓存。如果我站在你的立场上,我会使用一些简单then/catch的方法来最终产生如下错误:

 reference.set({ /* ----------------> Doesn't create a document until I disconnect and reconnect my Internet. */
          firstName: "",
          lastName: "",
          emailAddress: value.user.email,
          organisation: "",
          designation: "",
        }).then(() => {}, error => {
            console.error(error);
        }

现在代码将等待结果并给出最终错误。不幸的是,我不知道这是否会解决问题,因为我没有复制它,但也许您可以在故障排除中走得更远。


推荐阅读