【发布时间】:2019-01-28 04:35:48
【问题描述】:
我正在使用 Angular 6 做一个 Web 应用程序,用户可以在其中创建一个帐户。在一个表单中,他们提供了他们的姓名、性别、出生等……我想在创建新帐户时将此数据保存到 Firestore。
现在,帐户已正确创建,但数据未保存在 Firestore 中。
我尝试将函数设置为async,并将向Firestore 添加数据的调用设置为await,但是没有成功。我认为将数据保存到 Firestore 的行被忽略了。
我的用户模型:
export interface User {
firstName: string;
secondName: string;
firstSurname: string;
secondSurname: string;
emailAddress: string;
}
当您完成表格并点击提交时:
onFormSubmit() {
const password = this.personalInformation.get('password').value;
const user: User = {
firstName: this.personalInformation.get('firstName').value,
secondName: this.personalInformation.get('secondName').value,
firstSurname: this.personalInformation.get('firstSurname').value,
secondSurname: this.personalInformation.get('secondSurname').value,
emailAddress: this.personalInformation.get('emailAddress').value
};
this.authService.register(user, password)
.then(res => {
}, err => {
console.log(err);
});
}
创建用户并将数据添加到Firestore的方法:
register(user: User, password: string) {
return new Promise<any>((resolve, reject) => {
this.afAuth.auth.createUserWithEmailAndPassword(user.emailAddress, password)
.then(res => {
Object.assign(user, {
'dateOfCreationAccount': new Date(res.user.metadata.creationTime),
'lastSignInTime': new Date(res.user.metadata.lastSignInTime)
});
// Add user to firestore
this.firestoreService.addUser(res.user.uid, user);
// Send verification email
this.sendVerificationEmail();
// Logout user
this.logout();
resolve(res);
}, err => reject(err));
});
}
与async/await的方法相同:
register(user: User, password: string) {
return new Promise<any>((resolve, reject) => {
this.afAuth.auth.createUserWithEmailAndPassword(user.emailAddress, password)
.then(async res => {
Object.assign(user, {
'dateOfCreationAccount': new Date(res.user.metadata.creationTime),
'lastSignInTime': new Date(res.user.metadata.lastSignInTime)
});
// Add user to firestore
await this.firestoreService.addUser(res.user.uid, user);
// Send verification email
this.sendVerificationEmail();
// Logout user
this.logout();
resolve(res);
}, err => reject(err));
});
}
向Firestore添加数据的方法:
addUser(uid: string, data: User) {
this.usersCollection.doc(uid).set(data);
}
似乎this.firestoreService.addUser 行被忽略了。这个想法是在创建帐户后立即将用户的数据保存到 Firestore。
【问题讨论】:
-
你能提供你尝试使用
async/await的版本吗? -
嗨@Buczkowski,我已根据您的要求编辑了我的问题。
标签: javascript angular firebase google-cloud-firestore