【问题标题】:Angular: return type string into catchError but have HTTP with different typeAngular:将类型字符串返回到 catchError 但具有不同类型的 HTTP
【发布时间】:2020-04-10 16:44:32
【问题描述】:

我的 Observable 中的返回类型有问题。在我的服务中,当我尝试将字符串放入catchError 时,我的foo() 方法的返回类型出现错误。

service.ts

foo(): Observable<string> { <=== PROBLEM HERE
  return this.httpService
    .postSomething()
    .pipe(
      catchError((error: HttpErrorResponse) => {
        return of('Error');
      })
    );
}

httpService.ts

postSomething(): Observable<ObjModel> {
  return this.httpClient.request('post', 'url', {body});
}

错误说:

foo(): Observable<string | ObjModel> {

问题是我想只返回一个字符串,否则我的foo() 实现会返回一个错误,告诉我它需要一个字符串或一个objModel

感谢您的帮助。

【问题讨论】:

    标签: angular typescript rxjs


    【解决方案1】:

    您的函数 foo() 必须管理 2 个不同的案例

    1. http 调用没有发生错误,因此它返回postSomething() 返回的任何内容,您声明它是Observable&lt;ObjModel&gt;
    2. http 调用发生错误,因此它返回您在catchError 中编码的内容,即Observable&lt;string&gt;,因为您返回of('Error') which is exactly anObservableemitting astring`

    因此foo() 可以返回Observable&lt;ObjModel&gt;Observable&lt;strince&gt;,即它返回Observable&lt;string | ObjModel&gt;。这就是编译器报错的原因。

    【讨论】:

      【解决方案2】:

      问题是,如果没有错误,它就不会调用catchError,而实际上会返回Observable&lt;ObjModel&gt;。所以你也需要处理这种情况。

      【讨论】:

        【解决方案3】:

        如果没有错误,你的 foo() 函数会返回

        Observable<ObjModel>
        

        类型,所以你不能声明 foo() 函数返回

        foo(): Observable<string>
        

        键入。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多