これが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);
}
}
そして、私はここでエラーを取得しています:
Src/app/book.service.ts(26,18)のエラー:エラーTS2339:プロパティ 'catchError'はタイプ 'Observable'に存在しません。
エラーは26行目にあり、それは次のとおりです。
.catchError(this.handleErrorObservable);
私はたくさんのことを試しましたが、何もうまくいきませんでした...誰かがこれを解決できますか?
'catch'で実行しましたが、機能しませんでした。'catchError 'を選択しましたが、それでもこのエラーが発生します...
catchError
をインポートして、.pipe
内で使用する必要があります。
import {catchError} from 'rxjs/operators/catchError';
return this.http.get(this.url)
.pipe(
map(this.extractData),
catchError(this.handleErrorObservable)
);
pipe
内で次のように使用する必要があります。
getBooksWithObservable(): Observable<Book[]> {
return this.http.get(this.url)
.pipe(map(this.extractData),catchError(this.handleErrorObservable));
}
catchError
はpipe
に含まれている必要があります。
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)
);
}