Свойство 'catch' не существует для типа 'Observable'.ts (2339) Ошибка не устраняется путем добавления import' rxjs / add / operator / catch '; - PullRequest
0 голосов
/ 20 июня 2019

При наведении курсора на .catch(this.errorHandler) появляется сообщение об ошибке

Свойство 'catch' не существует для типа 'Observable'.ts (2339)

Я не могу импортировать функцию catch в угловой текст.

При наведении на .catch(this.errorHandler) появляется сообщение об ошибке

Свойство catch не существует натип 'Observable'.ts (2339)

Согласно другому сообщению стека: Свойство' catch 'не существует для типа' Observable ' Я должен просто добавить:

import 'rxjs/add/operator/catch'

Я также пытался импортировать

import {Observable} from 'rxjs/Rx';

и

import { catchError } from 'rxjs/operators'; 

и использовать catchError вместо catch.

Ничего из этого не сработало

    import { Injectable } from '@angular/core';
    import { HttpClient, HttpErrorResponse } from '@angular/common/http';
    import { IEmployee } from './employee';
    import { Observable, fromEventPattern } from 'rxjs';
    import 'rxjs/add/operator/catch';
    import {catchError} from "rxjs/operators"
    import 'rxjs/add/observable/throw';

    @Injectable({
      providedIn: 'root'
    })
    export class EmployeeService {

      private _url : string = "../assets/data/employees.json";
      constructor(private http: HttpClient) { }

      getEmployees(): Observable<IEmployee[]>{
        return this.http.get<IEmployee[]>(this._url)
                        .catch(this.errorHandler)
      }
      errorHandler(error:HttpErrorResponse){
          return Observable.throw(error.message ||"Server Error")
      }
    }

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Попробуйте это (catchError with throwError):

import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { IEmployee } from './employee';
import { Observable, fromEventPattern, throwError} from 'rxjs';
import {catchError} from "rxjs/operators"

@Injectable({
  providedIn: 'root'
})
export class EmployeeService {

  private _url : string = "../assets/data/employees.json";
  constructor(private http: HttpClient) { }

  getEmployees(): Observable<IEmployee[]>{
    return this.http.get<IEmployee[]>(this._url)
                   .pipe(catchError(this.handleError));
  }

   handleError(error: HttpErrorResponse) {

     //throwError instead of Observable.throw
      return throwError(error.error.message ||"Server Error");
  };
}
1 голос
/ 20 июня 2019

Два выпуска:

  1. Использование catchError, а не catch

  2. Используйте его с .pipe ()

     return this.http.get<IEmployee[]>(this._url)
                .pipe(catchError(this.errorHandler));
    
...