Angular 错误TS2339:属性';捕捉错误';不存在于类型';可观察<;任何>';

Angular 错误TS2339:属性';捕捉错误';不存在于类型';可观察<;任何>';,angular,angular-services,Angular,Angular Services,这是我在book.service.ts中的代码: import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import {Observable} from 'rxjs'; import { Book } from './book'; import { map } from "rxjs/operators"; import { catchError } from 'rxj

这是我在book.service.ts中的代码:

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import {Observable} from 'rxjs';
import { Book } from './book';
import { map } from "rxjs/operators";
import { catchError } from 'rxjs/operators';

//import { Component, OnInit } from '@angular/core';
//import {HttpClient} from "@angular/common/http";
//import { Observable } from 'rxjs/Observable'; 
//import 'rxjs/add/operator/map';
//import 'rxjs/add/operators/catch';
//import 'rxjs/operators/toPromise';

@Injectable()
export class BookService 
{
    url = "http://localhost:4200/assets/data/books.json";

    constructor(private http:Http) { }

    getBooksWithObservable(): Observable<Book[]> 
    {
        return this.http.get(this.url)
                .pipe(map(this.extractData))
                .catchError(this.handleErrorObservable);
    }
    getBooksWithPromise(): Promise<Book[]> 
    {
        return this.http.get(this.url).toPromise()
            .then(this.extractData)
            .catch(this.handleErrorPromise);
    }
    private extractData(res: Response) 
    {
        let body = res.json();
        return body;
    }
    private handleErrorObservable (error: Response | any) 
    {
        console.error(error.message || error);
        //console.log("Error in Observable");
        return Observable.throw(error.message || error);
    }
    private handleErrorPromise (error: Response | any) 
    {
        console.error(error.message || error);
        return Promise.reject(error.message || error);
    }   
}
我试了很多东西,但都没用。。。谁能解决这个问题


使用了“catch”但不起作用,因此我选择了“catchError”,但仍然存在此错误…

catchError
需要导入,然后在
中使用。管道

import {catchError} from 'rxjs/operators'; 

return this.http.get(this.url)
            .pipe(
              map(this.extractData),
              catchError(this.handleErrorObservable)
            );

catchError
必须位于管道内部

 import { Observable, pipe } from 'rxjs';
 import { map, catchError } from 'rxjs/operators';

 getBooksWithObservable(): Observable<Book[]> 
    {
        return this.http.get(this.url)
                .pipe(
                   map(this.extractData),
                   catchError(this.handleErrorObservable)
                 );                    
    }
从'rxjs'导入{Observable,pipe};
从“rxjs/operators”导入{map,catchError};
getBooksWithObservable():Observable
{
返回this.http.get(this.url)
.烟斗(
地图(这是提取数据),
catchError(this.handleErrorRobServable)
);                    
}

您需要在管道内部使用它,如下所示:

getBooksWithObservable(): Observable<Book[]> {
  return this.http.get(this.url)
             .pipe(map(this.extractData),catchError(this.handleErrorObservable));
}
getBooksWithObservable():Observable{
返回this.http.get(this.url)
.pipe(map(this.extractData)、catchError(this.handleErrorObservable));
}
您必须更改为:

...
return this.http.get(this.url).subscribe((r:Author)=>console.log("GOOD"),err=>console.log("ERROR))
...

这是rxjs的问题

你明白了,兄弟!完成它。。。非常感谢,顺便说一下:-)路径不正确
从'rxjs/operators
@Krack导入{catchError}取决于您使用的是哪个rxjs版本。
...
return this.http.get(this.url).subscribe((r:Author)=>console.log("GOOD"),err=>console.log("ERROR))
...