我正在尝试创建一个用户个人资料,指出该个人资料来自我应用程序中的一位业务所有者。应该创建一个配置文件,然后将其中包含“businessOwner”的“角色”数组之类的信息合并,并添加“businessId”。
有时,代码会无缝运行。在其他时候,只有角色和businessId会传递给创建的用户(而其他所有信息都不会!)。

  async function writeToFirebase(values) {
    authService.createUserWithEmailAndPassword(values.user.email, values.user.senha).then(
      async function (user) {
        userService.createUserProfileDocument(values.user)
        const uid = user.user.uid
        const userRef = await userService.doc(uid)
        console.log('userRef', userRef)
        try {
          values.user.uid = uid
          const { id } = await businessPendingApprovalService.collection().add(values)
          await userRef.set({ roles: ['businessOwner'], businessId: id }, { merge: true })
        } catch (error) {
          console.error('error merging info')
        }
      },
      function (error) {
        var errorCode = error.code
        var errorMessage = error.message
        console.log(errorCode, errorMessage)
      },
    )
  }
这是createUserWithEmailAndPassword:
async createUserProfileDocument(user, additionalData) {
    if (!user) return
    const userRef = this.firestore.doc(`users/${user.uid}`)
    const snapshot = await userRef.get()
    if (!snapshot.exists) {
      const { displayName, email, photoURL, providerData } = user
      try {
        await userRef.set({
          displayName,
          email,
          photoURL,
          ...additionalData,
          providerData: providerData[0].providerId,
        })
      } catch (error) {
        console.error('error creating user: ', error)
      }
    }
    return this.getUserDocument(user.uid)
  }

最佳答案

我认为问题在于const snapshot = await userRef.get()这行。
documentation中所述,您应该使用then()函数获取快照,以便首先返回 promise 。

10-05 20:36
查看更多