在基于Angular / TypeScript的Web应用程序中,我有一个组件,该组件具有用于注册用户的方法。它使用身份验证服务来注册用户
async registerNewUser() {
try {
let value = await this.authService.registerRegular(this.user.email, this.user.password);
console.log(value); // #2: value is undefined (I expect that it also prints the same result as in #1)
}
catch (err) {
this.registerError = err;
console.log(err);
}
}
服务方法registerRegular
如下
async registerRegular(email, password): Promise<any> {
var credentials = await this.firebaseAuth.auth.createUserWithEmailAndPassword(email, password);
var promise = this.db.database.ref('users').child(credentials.user.uid).set({hello:"world"});
console.log(promise); // #1: works. Promise is printed to console
return promise;
}
问题:我正在等待registerRegular
的结果,但是它总是在#2中返回undefined
。当我在返回承诺之前打印承诺(#1)时,我可以看到打印的承诺对象。
因此,似乎未返回该异步方法的承诺。至少在调用方法中它永远不会存在。
我在这里做什么错了?
答案 0 :(得分:2)
使用value = await f()
是f().then((v) => value = v)
的同步版本。也就是说,当您Promise
时,您没有得到await
,而是得到了Promise
解析为的值。