首页 > 解决方案 > 错误:类型不是 ES5/ES3 中的有效异步函数返回类型,因为它没有引用与 Promise 兼容的构造函数

问题描述

我在 TypeScript 中编写了这个函数:

export class LoginService {

  async isLoggedIn(): boolean {
    const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
    return r.body;
  }
}

当我尝试运行 Angular 6 应用程序时,我收到以下错误消息:

src/app/login.service.ts(28,23) 中的错误:错误 TS1055:类型 'boolean' 在 ES5/ES3 中不是有效的异步函数返回类型,因为它没有引用与 Promise 兼容的构造函数值。

我之前在其他应用程序中使用过 async/await 之前没有遇到过这个问题。

更新:我想回答的问题是:如何让“isLoggedIn”函数返回布尔值?

标签: angularpromise

解决方案


一个async函数只能根据定义返回一个 Promise - 所有async函数都返回 Promise。它不能返回布尔值。

这就是 TypeScript 告诉你的。该async函数可以返回一个解析为布尔值的承诺。

return在函数中的值成为函数返回async的承诺的解析值。async因此,您的函数的返回类型async是一个承诺(解析为布尔值)。

will的调用者isLoggedIn()必须使用.then()它或await使用它。

export class LoginService {

    async isLoggedIn(): Promise<any> {
      const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
      return r.body;
    }

}

推荐阅读