Конвертировать сбой Observable в хороший - PullRequest
0 голосов
/ 30 октября 2018

У меня есть вызов к службе 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, подписка была успешной.

1 Ответ

0 голосов
/ 30 октября 2018

Затем просто верните новый объект 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 */)
    }
})
...