我正在try 使用AngularFire创建我在Angular中的第一个应用程序,以帮助Firebase操作,在登录Twitter后,我正在try 将该用户作为文档添加到我的users
个Collection 中.
processLoggedUser(): Promise<number> {
return this.afAuth.getRedirectResult().then(async result => {
if (result.user) {
const uid = result.user.uid;
const credential = result.credential as firebase.default.auth.OAuthCredential;
console.log('Twitter answer of AuthLogin: ', result)
this.uid = uid
let code = 0 // 0 = default code -> error
if (result.additionalUserInfo.isNewUser) {
console.log("New user")
this.user = {
uid: this.uid,
email: result.user.email,
displayName: result.user.displayName,
photoURL: result.user.photoURL.replace('_normal', ''),
miniPhotoURL: result.user.photoURL,
accessToken: credential.accessToken,
secret: credential.secret,
twitterId: result.additionalUserInfo.profile["id"],
username: result.additionalUserInfo.username,
bio: result.additionalUserInfo.profile["description"],
verified: result.additionalUserInfo.profile["verified"],
wallet: 0,
staff: false,
banned: false,
hidden: false
};
console.log(this.user)
await this.afs.collection('users').doc(this.uid).set(this.user || {nome: "oops"}).then(res => {
console.log("User created", res)
code = 2 // Number code for new user
}).catch(err => {
console.log("Error creating user", err)
code = 0 // Number code for error
})
return 2
} else {
await this.getUser(uid).then(res => res.subscribe(res => {
if (res == undefined) {
this.signOut()
code = 4 // Number code for user not found
} else {
this.user = res
console.log("Existing user", this.user)
code = 1 // Number code for existing user
}
}))
}
return code
}else {
return 3
}
}).catch((error) => {
console.warn(error)
return 0 // Number code for error
})
}
真正困扰我的是这一部分:
await this.afs.collection('users').doc(this.uid).set(this.user).then(res => {
console.log("User created", res)
code = 2 // Number code for new user
}).catch(err => {
console.log("Error creating user", err)
code = 0 // Number code for error
})
它永远不会到达.then()或.catch(),它只是一直在等待响应.但是,如果我把这个完全相同的代码放在构造函数或其他任何地方,它工作得很好,实际上在Firestore数据库中创建了文档.
有人能给我建议一个方法来实现这一点吗?