Angular: вернуть строку типа в catchError, но иметь HTTP с другим типом - PullRequest
0 голосов
/ 10 апреля 2020

У меня проблема с типом возврата в моем 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 .

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

Проблема в том, что если ошибки не будет, она не вызовет catchError и вернет на самом деле Observable<ObjModel>. Так что вам также нужно разобраться с этим делом.

1 голос
/ 10 апреля 2020

Ваша функция foo() должна обрабатывать 2 разных случая

  1. В вызове http не возникает ошибок, и поэтому она возвращает все, что возвращается postSomething(), который вы объявляете Observable<ObjModel>
  2. Произошла ошибка в вызове http, и поэтому он возвращает то, что вы закодировали в catchError, то есть Observable<string>, так как вы возвращаете of('Error') which is exactly an Наблюдаемый emitting a string`

Следовательно, foo() может возвращать либо Observable<ObjModel>, либо Observable<strince>, т.е. он возвращает Observable<string | ObjModel>. Это причина, по которой компилятор жалуется.

0 голосов
/ 10 апреля 2020

если ошибки нет, ваша функция foo () вернет тип

Observable<ObjModel>

, поэтому вы не можете объявить функцию foo (), возвращающую тип

foo(): Observable<string>

.

...