我对async
和await
非常陌生,我希望有人可以帮助我。
我有一个函数调用register
,在该函数中我注册了一个用户,然后将一些关于它们的数据发送到服务器以构建一个"用户配置文件"可以这么说。
我遇到的问题是我还有一个名为login
的函数,它也是异步的,只要注册了,就会重定向用户。这意味着& #34;用户个人资料"数据永远不会被发送。
这是我的register
功能:
async register(user: User) {
try {
const result = await this.afAuth.auth.createUserWithEmailAndPassword(user.email, user.password);
await this.afAuth.auth.currentUser.updateProfile({
displayName: user.displayName,
photoURL: ""
}).then(() => {
let currentUser = result;
let date = new Date().getTime();
let userData = {
email: currentUser.email,
displayName: currentUser.displayName,
uid: currentUser.uid,
created: date,
}
this.database.list('users').set(userData.uid, userData).then(() => {
return;
}); //I want to continue after this line is called.
return;
}, function(error) {
console.log(error)
});
} catch(e) {
console.log(e);
}
}
我的await
位置错误吗?我希望在login
...
.set
函数
任何想法我做错了什么......我非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
答案 1 :(得分:0)
await让你等待承诺。 async-await的最大好处之一是不必使用then
语法或任何明确的承诺。不确定为什么要混合样式。 “做更多事情”非常简单。在等待声明之后。
这是一些伪代码。我拿出了try catch,因为你的整个函数都在其中,这使得它毫无意义。此外,如果任何承诺拒绝,它将被转换为异常。如果在promise中发生异常,则将其转换为拒绝,然后将其转换为异常。承诺之外的其他例外是普通的例外。
我冒昧地将TypeScript标记添加到您的问题中,因为您发布了TypeScript语法。 TypeScript不是Javascript 。
async register(user: User) {
const result = await createUser(...);
await updateProfile(...);
const userData = buildUserData(...);
await setUserData(database, userData);
console.log('more stuff after setUserData');
}