Ошибка: тип не является допустимым типом возврата асинхронной функции в ES5 / ES3, поскольку он не ссылается на Promise-совместимый конструктор - PullRequest
0 голосов
/ 08 октября 2018

Я написал эту функцию на 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" для возврата логического значения?

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Если ваша конечная точка /api/user/isLoggedIn возвращает только логическое значение, вы можете просто использовать ниже, приведя метод http get.Но на самом деле вы можете вернуть обещание только из асинхронной функции.

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();
0 голосов
/ 08 октября 2018

Функция async может ТОЛЬКО вернуть обещание по определению - все функции async возвращают обещания.Он не может вернуть логическое значение.

Вот что говорит вам TypeScript.Функция async может возвращать обещание, которое разрешается в логическое значение.

Значение, которое вы return внутри своей функции async, становится разрешенным значением обещания, которое возвращает функция async.Итак, тип возвращаемого значения для вашей функции async является обещанием (которое разрешается в логическое значение).

Абонент 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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...