0

我调用了一个返回 observable 的 HTTP 服务(它是第三方库的一部分,因此我无法更改其内部代码),并且它在订阅我想处理的用例时抛出错误小路。

我有这样的事情:

我的服务等级:

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 的情况,使订阅成功。

4

1 回答 1

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 */)
    }
})
于 2018-10-30T12:46:06.217 回答