将失败的 Observable 转化为好的 Observable

Convert failing Observable into a good one

我调用了一个 HTTP 服务,该服务 return 是一个可观察对象(它是第三方库的一部分,所以我无法更改其内部代码)并且它在订阅用例时抛出错误我想在快乐的道路上处理。

我有这样的东西:

我的服务class:

class MyService {
  getEntities(): Observable<any> {
    return this.http.get('<the url'>)
      .pipe(
        catchError(err => {
          // Handle the errors and returns a string corresponding to each message.
          // Here I show an example with the status code 403
          if (err.status === 403) {
            return throwError('My error message for 403');
          }

          // This is what I want to do.
          if (err.status === 409) {
            // Somehow, make this to trigger the goodResponse in the consumer class.
          }
        })
      );
  }
}

我的消费者:

class MyComponent {
  private myService: MyService;

  constructor() {
    this.myService = new MyService();
  }

  callTheAPI() {
    this.myService.getEntities()
      .subscribe(goodResponse => {
        // Handle good response
      }, error => {
        // Handle error
      });
  }
}

所以,对于当前的代码示例,我想做的是,对于状态码为409的情况,让订阅成功。

然后 return 一个新的 Observable(发送 next 项)。 throwError 仅发送 error 通知,因此您可以使用 of():

import { of } from 'rxjs';

...

catchError(err => {
    // Handle the errors and returns a string corresponding to each message.
    // Here I show an example with the status code 403
    if (err.status === 403) {
        return throwError('My error message for 403');
    }

    // This is what I want to do.
    if (err.status === 409) {
        return of(/* fake response goes here */)
    }
})