X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fapp%2Fhero.service.ts;h=75a002b12d73f9bd7180590dfd9835b254ac8bc9;hb=806998ac75abe1082f666c141e0bd3f1a8ae7af1;hp=90fa42c4eafc17eea7cebd39385df345a8e7e3ff;hpb=10071c9e2d5fefe91c5b8d9946bb964776b59c0e;p=examples%2Fangular-tour-of-heroes diff --git a/src/app/hero.service.ts b/src/app/hero.service.ts index 90fa42c..75a002b 100644 --- a/src/app/hero.service.ts +++ b/src/app/hero.service.ts @@ -4,7 +4,7 @@ import { Hero } from './hero'; import { HEROES } from './mock-heroes'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { MessageService } from './message.service'; -import { catchError } from 'rxjs/operators'; +import { catchError, tap } from 'rxjs/operators'; @Injectable({ @@ -12,7 +12,7 @@ import { catchError } from 'rxjs/operators'; }) export class HeroService { - private heroesUrl = 'api/heroes'; // URL to web api + heroesUrl = 'api/heroes'; // URL to web api constructor( private http: HttpClient, @@ -23,18 +23,19 @@ export class HeroService { return this.http .get(this.heroesUrl) .pipe( + tap((heroes: Hero[]) => this.log(`fetched ${heroes.length} heroes`)), catchError(this.handleError('getHeroes', [])) ); } + /** GET hero by id. Will 404 if id not found */ getHero(id: number): Observable { this.log(`requested hero id=${id}`); - const found: Hero | undefined = HEROES.find(hero => hero.id === id); - if (found === undefined) { - return EMPTY; - } else { - return of(found); - } + const url = `${this.heroesUrl}/${id}`; + return this.http.get(url).pipe( + tap(_ => this.log(`fetched hero id=${id}`)), + catchError(this.handleError(`getHero id=${id}`)) + ); } /** @@ -53,7 +54,11 @@ export class HeroService { this.log(`${operation} failed: ${error.message}`); // Let the app keep running by returning an empty result. - return of(result as T); + if (result === undefined) { + return EMPTY as Observable; + } else { + return of(result as T); + } }; }