【问题标题】:What is the typedef for an async void什么是异步 void 的 typedef
【发布时间】:2018-07-04 16:30:33
【问题描述】:

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 { ... }

这给了我错误:

type 'void' 在 ES5 中不是有效的异步函数返回,因为它 不引用与 pPromise 兼容的构造函数值

如何在不删除 async 关键字的情况下做到这一点?

【问题讨论】:

  • async 函数必须返回 Promise/Observable,这就是为什么你会在这里得到一个错误

标签: javascript angular typescript asynchronous


【解决方案1】:

type '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 对象,因此您需要通过调用 toPromise() 调用函数将其转换为 promise 对象(如果您不输入 toPromise 它不会触发请求如果您在服务中使用 httpClient 来获得结果。)。

【讨论】:

    【解决方案2】:

    将返回类型更改为:

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

    【讨论】:

      【解决方案3】:

      返回Observable 类型

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

      【讨论】:

        猜你喜欢
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2012-10-03
        • 2014-04-22
        • 2013-01-25
        相关资源
        最近更新 更多