![](/img/trans.png)
[英]Javascript how to properly await for a function before triggering the next one?
[英]Javascript - await triggering at wrong time
我对async
和await
非常await
,希望有人可以帮助我。
我有一个函数调用register
,在该函数中,我注册了一个用户,然后将有关它们的一些数据发送到服务器以建立一个“用户配置文件”。
我遇到的问题是,我还有一个名为login
的函数,该函数也是异步的,并在用户注册后立即将其重定向..这意味着“用户配置文件”数据永远不会发送。
这是我的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
吗? 我希望一旦数据为.set
即可调用login
函数...
任何想法我在做什么错..我真的很感谢任何帮助。 谢谢!
使用async / await
目的是您不必处理then()
或catch()
。
async function 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: ""
});
let currentUser = result;
let date = new Date().getTime();
let userData = {
email: currentUser.email,
displayName: currentUser.displayName,
uid: currentUser.uid,
created: date,
};
await this.database.list('users').set(userData.uid, userData)
// Do something after everything above is executed
return;
} catch(e) {
console.log(e);
}
};
等待让您等待诺言。 一个异步的await的最大好处就是不必使用then
语法或任何明确的承诺。 不知道为什么要混合样式。 在await语句之后“做更多的事情”非常简单。
这是一些伪代码。 我删除了try catch,因为您的整个功能都在其中,这使其变得毫无意义。 同样,如果任何承诺被拒绝,它将被转换为异常。 如果在承诺内发生异常,则将其转换为拒绝,然后将其转换为异常。 承诺之外的其他例外是普通的旧例外。
我自由地将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');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.