首页 > 解决方案 > 为什么异步 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)时,我可以看到打印的承诺对象。

所以似乎没有返回该异步方法的承诺。至少在调用方法中它永远不存在。

我在这里做错了什么?

标签: typescript

解决方案


使用value = await f()的是同步版本f().then((v) => value = v)。即当你没有得到aPromiseawait,你得到了Promise解析为的值。


推荐阅读