typescript - 为什么异步 TypeScript 函数不返回 Promise
问题描述
在基于 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
但它总是undefined
在 #2 中返回。当我在返回之前打印承诺(#1)时,我可以看到打印的承诺对象。
所以似乎没有返回该异步方法的承诺。至少在调用方法中它永远不存在。
我在这里做错了什么?
解决方案
使用value = await f()
的是同步版本f().then((v) => value = v)
。即当你没有得到aPromise
时await
,你得到了Promise
解析为的值。
推荐阅读
- css - CSS 特异性和级联
- android - 发布版华为AppGallery 6003错误码
- amazon-web-services - 无法在 AWS 中为 Lambda 函数设置 S3 触发器
- javascript - 有没有什么方法可以通过js在浏览器中获取操作系统信息?
- python - 如何为python sqlite添加带有字符的自动增量ID
- google-sheets - 谷歌表格数组公式不在其他列中工作,但在另一个列中工作
- expo - Sentry 错误日志记录在 React Native 应用程序中未按预期工作
- java - 如何定义第一次调用我的 @Scheduled 方法的时间?
- java - 如何使用正则表达式匹配字符串以知道字母的前两个单词的第一个单词后来大写
- flutter - 在没有 Flutter 的情况下在 Dart 中使用基本类,如 `Offset`/`Color`