Ошибка: Тип не является допустимым типом возврата функции async в ES5/ES3, поскольку он не относится к совместимому с Promise конструктору - программирование
Подтвердить что ты не робот

Ошибка: Тип не является допустимым типом возврата функции async в 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, я получаю это сообщение об ошибке:

ERROR в src/app/login.service.ts(28,23): ошибка TS1055: Тип 'boolean' не является допустимым типом возвращаемой функции async в ES5/ES3, поскольку он не ссылается на значение конструктора, совместимого с Promise.

Я использовал async/wait в других приложениях, прежде чем не допустить этого раньше.

ОБНОВЛЕНИЕ: Вопрос, на который я бы хотел ответить, - это: как мне получить функцию isLoggedIn для возврата к логическому?

4b9b3361

Ответ 1

Функция 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;
    }

}

Ответ 2

Если ваша конечная точка /api/user/isLoggedIn возвращает только логическое значение, вы можете просто использовать ниже, /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();