为什么异步TypeScript函数不返回Promise

时间:2019-01-10 18:54:11

标签: typescript

在基于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)时,我可以看到打印的承诺对象。

因此,似乎未返回该异步方法的承诺。至少在调用方法中它永远不会存在。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:2)

使用value = await f()f().then((v) => value = v)的同步版本。也就是说,当您Promise时,您没有得到await,而是得到了Promise解析为的值。