2016-12-05 74 views
0

我试图使http调用,如果将有任何错误做我的事情。在http获取错误获得

这里是我的代码:

import { Injectable } from '@angular/core'; 

import { Http, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 

import 'rxjs/add/observable/throw'; 

// Operators 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/operator/debounceTime'; 
import 'rxjs/add/operator/distinctUntilChanged'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/switchMap'; 
import 'rxjs/add/operator/toPromise'; 

@Injectable() 
export class HttpCallService { 

    constructor(private http: Http) { } 

    getHeroes(): Observable<Hero[]> { 
     console.log('entered'); 
     return this.http.get('Url') 
      .map(this.extractData) 
      .catch(this.handleError); 
    } 
    private extractData(res: Response) { 
     console.log('extract entered'); 
     let body = res.json(); 
     return body.data || {}; 
    } 
    private handleError(error: Response | any) { 
     console.log('error entered'); 

     let errMsg: string; 
     if (error instanceof Response) { 
      const body = error.json() || ''; 
      const err = body.error || JSON.stringify(body); 
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
     } else { 
      errMsg = error.message ? error.message : error.toString(); 
     } 
     console.error(errMsg); 
     return Observable.throw(errMsg); 
    } 

} 

export class Hero { 
    constructor(
     public id: Date, 
     public author: string, 
     public text: string 
    ) { } 
} 

当我喊它,它在控制台日志中唯一进入这在getHeroes。我知道会有错误,我没有有效的网址,但为什么它不去抓?

回答

1

您需要调用subscribe()方法来进行实际的HTTP调用。你的方法getHeroes()只是声明它会在有人订阅时返回Observable。这就是为什么你只能看到来自getHeroes()的日志 - extractData()和handleErrors()甚至没有被调用。

您需要在代码中的某处执行getHeroes()。subscribe()。