【发布时间】:2020-10-11 11:16:04
【问题描述】:
我正在尝试创建一个用户个人资料,说明该个人资料来自我应用中的一位企业主。它应该创建配置文件,然后将“roles”数组与“businessOwner”等信息合并,并添加“businessId”。
有时,代码会无缝运行。在其他时候,只会将角色和业务 ID 传递给创建的用户(所有其他信息都不会!)。
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()。您必须使用then()以确保您在承诺返回后获得spanshot。请查看此doc,了解如何获取文档。 -
所以我可以完全摆脱
createUserProfileDocument函数中的异步等待? -
我的评论是要指出,为了解决承诺权,您需要使用
then()以确保在承诺返回后获取快照。
标签: javascript reactjs google-cloud-firestore