6: Get Data from a Server
authorKai Moritz <kai@juplo.de>
Sat, 16 May 2020 11:53:43 +0000 (13:53 +0200)
committerKai Moritz <kai@juplo.de>
Sun, 17 May 2020 14:08:39 +0000 (16:08 +0200)
g) Heroes and HTTP - Get hero by id

src/app/hero.service.ts

index f8374b1..a0b5d5b 100644 (file)
@@ -28,14 +28,14 @@ export class HeroService {
       );
   }
 
+  /** GET hero by id. Will 404 if id not found */
   getHero(id: number): Observable<Hero> {
     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<Hero>(url).pipe(
+      tap(_ => this.log(`fetched hero id=${id}`)),
+      catchError(this.handleError<Hero>(`getHero id=${id}`))
+    );
   }
 
   /**
@@ -54,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<T>;
+      } else {
+        return of(result as T);
+      }
     };
   }