异步void的typedef是什么

时间:2018-07-04 08:24:01

标签: javascript angular typescript asynchronous

this question相关的一点,但有所不同。

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 :(得分:2)

将返回类型更改为:

private async getTranslations(): Promise<void> {
  this.translations = await this._languageService.getTranslations('Foo');
}

答案 1 :(得分:1)

返回Observable类型

private async getTranslations() : Observable<any>{ ... }

答案 2 :(得分:1)

  

类型'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对象,因此您需要通过调用call的promise函数将其转换为toPromise()对象(如果您不放置{{ 1}},如果您在服务中使用httpClient来获取结果,它将不会触发请求。)

相关问题