На странице документации Angular 2 для использования службы Http есть пример.

getHeroes (): Observable {
  return this.http.get(this.url)
                  .map(this.extractData)
                  .catch(this.handleError);
}

Я клонировал проект angular2-webpack-starter и сам добавил указанный выше код.

Я импортировал Observable, используя

import {Observable} from 'rxjs/Observable';

Я предполагаю, что свойства Observable также импортированы (.map работает). Посмотрел журнал изменений для rxjs.beta-6, и ничего не упоминается о catch.

Ответы (3)

Предупреждение: это решение устарело, начиная с Angular 5.5, обратитесь к ответу Трента ниже

=====================

Да, нужно импортировать оператор:

import 'rxjs/add/operator/catch';

Или импортируйте Observable следующим образом:

import {Observable} from 'rxjs/Rx';

Но в этом случае вы импортируете все операторы.

Подробнее см. В этом вопросе:

В угловом 8:

//for catch:
import { catchError } from 'rxjs/operators';

//for throw:
import { Observable, throwError } from 'rxjs';

//and code should be written like this.

getEmployees(): Observable {
    return this.http.get(this.url).pipe(catchError(this.erroHandler));
  }

  erroHandler(error: HttpErrorResponse) {
    return throwError(error.message || 'server Error');
  }

В RxJS 5.5+ оператор catch теперь устарел. Теперь вы должны использовать оператор catchError вместе с pipe.

RxJS v5.5.2 - версия зависимости по умолчанию для Angular 5.

Для каждого импортируемого оператора RxJS, включая catchError, теперь вы должны импортировать из 'rxjs / operator' и использовать оператор конвейера.

Пример обнаружения ошибки для HTTP-запроса Observable

import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
...

export class ExampleClass {
  constructor(private http: HttpClient) {
    this.http.request(method, url, options).pipe(
      catchError((err: HttpErrorResponse) => {
        ...
      }
    )
  }
  ...
}

Обратите внимание, что catch заменяется на catchError, а оператор pipe используется для составления операторов аналогично тому, как вы используется с цепочкой точек.


Дополнительную информацию см. В документации rxjs по операторам pipable (ранее называвшимся lettable).

2022 WebDevInsider