错误:类型不是ES5 / ES3中的有效异步函数返回类型,因为它未引用Promise兼容的构造函数

时间:2018-10-08 01:42:34

标签: angular 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”函数以返回布尔值?

3 个答案:

答案 0 :(得分:9)

async函数只能按定义返回承诺-所有async函数均返回承诺。它不能返回布尔值。

这就是TypeScript告诉您的。 async函数可以返回解析为布尔值的Promise。

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

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;
    }

}

答案 1 :(得分:0)

如果端点/api/user/isLoggedIn仅返回布尔值,那么您应该可以通过强制使用http get方法在下面使用它。但是实际上您只能从异步函数返回一个Promise。

export class LoginService {
  async isLoggedIn(): Promise<boolean> {
    return this.http.get<boolean>('http://localhost:3000/api/user/isLoggedIn').toPromise();
  }
}

您可能有一个异步函数消耗了isLoggedIn(),如下所示:

async doSomething() {
  const loggedIn: boolean = await service.isLoggedIn();
  if (loggedIn) {
    doThis();
  }    
}

这样会被称为

await doSomething();

答案 2 :(得分:-1)

我会说升级到ES6。

与其他回答中的对话相反,该回答说异步函数只能返回一个诺言,javascript.info的明确表达是,等待的诺言将返回原始值,就像您在自己的尝试中所做的那样。题。因此,我认为这是here

引起的ES5问题