将失败的Observable转换为好的

时间:2018-10-30 12:23:00

标签: typescript rxjs rxjs6 rxjs-pipeable-operators rxjs-lettable-operators

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

我有这样的东西:

我的服务等级:

class MyComponent {
  private myService: MyService;

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

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

我的消费者:

f

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

1 个答案:

答案 0 :(得分:3)

然后只返回一个新的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 */)
    }
})