Что такое typedef для асинхронной пустоты - PullRequest
0 голосов
/ 04 июля 2018

Слегка связано с этим вопросом , но отличается.

TSLint жалуется на этот код, потому что ему нужен typedef:

  private async getTranslations() {
    // this.translations is a public variable used by the html
    this.translations = await this._languageService.getTranslations('Foo');
  }

Я обновил его до

private async getTranslations() : void { ... }

И это дает мне ошибку:

тип 'void' не является допустимым возвращением асинхронной функции в ES5, поскольку не ссылается на pPromise-совместимое значение конструктора

Как я могу получить это право, не удаляя ключевое слово async?

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Изменить тип возврата на:

private async getTranslations(): Promise<void> {
  this.translations = await this._languageService.getTranslations('Foo');
}
0 голосов
/ 04 июля 2018

тип 'void' не является допустимым возвращением асинхронной функции в ES5, потому что не ссылается на pPromise-совместимое значение конструктора

вы получаете ошибку, потому что при использовании async/await тип возвращаемого значения будет Promise обернутым объектом, поэтому тип возвращаемого значения функции должен быть Promise<returntype>, а в вашем случае это будет

 private async getTranslations() : Promise<void> {
    // this.translations is a public variable used by the html
    this.translations = await this._languageService.getTranslations('Foo').toPromise();
  }

и если вы используете angular, то сервис в основном возвращает объект observable, поэтому вам необходимо преобразовать его в promise объект, вызвав toPromise() функцию вызова (если вы не введете toPromise, запрос не будет запущен если вы использовали httpClient в своем сервисе для получения результата.).

0 голосов
/ 04 июля 2018

Возвращает тип Observable

private async getTranslations() : Observable<any>{ ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...