Estoy usando Angular 2 HTTP, y tienen un componente de la suscripción a la respuesta. Sin embargo, cuando hay un error, la captura método no devuelve el error para el suscrito componente. Sólo se echa en la consola.

JS:

 saveFinalize(fcData: LastForecastInterface) {
    let responseData = JSON.stringify(fcData);
    let body = responseData;

    const headers = new Headers();
    headers.append('Content-Type', 'application/json;charset=UTF-8');

    return this.http.post('/saveFinalize', body, { headers: headers })
      .map((data: Response) => data.json())
      .catch(this.handleError);
}

public handleError(error: Response | any) {
    console.log('err: ', error)
    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);
    return errMsg;
}

Y mi suscrito componente no obtener una respuesta

JS:

saveFinalize() {
  this.loadingData = true;
  return this.httpService.saveFinalize(this.getFc.fcData)
    .subscribe(response => {
        this.loadingData = false;
        console.log(response);
        let saveResponse = response.success ? 'Successfully Saved Finalized!' : 'Error Saving Finalized! - ' + response.message;
        let respType = response.success ? 'success' : 'danger';
        this.alertSvc.showAlert(saveResponse, respType);
    });
}

InformationsquelleAutor ahrobins | 2017-03-08

2 Comentarios

  1. 10

    Ver este código aquí: (es de https://angular.io/docs/ts/latest/guide/server-communication.html)

    getHeroes() {
      this.heroService.getHeroes()
                      .subscribe(
                        heroes => this.heroes = heroes,
                        error =>  this.errorMessage = <any>error);
    }

    Aviso hay 2 argumentos .suscribirse() método. Uno es la respuesta que usted use, y el siguiente es el error. Con el fin de pasar el error para el suscrito componente debe utilizar el argumento más tarde, lo que hará que el código tiene este aspecto:

      return this.httpService.saveFinalize(this.getFc.fcData).subscribe(response => {
        this.loadingData = false;
        console.log(response);
        let saveResponse = response.success ? 'Successfully Saved Finalized!' : 'Error Saving Finalized! - ' + response.message;
        let respType = response.success ? 'success' : 'danger';
        this.alertSvc.showAlert(saveResponse, respType);
      }, error => {
        //the errorMessage will be passed here in this "error" variable
      });

    Cuando el suscrito método devuelve una respuesta correcta, sólo obtendrá su respuesta. Pero cuando el suscrito método produce un error al no obtener respuesta de su parte, sólo obtendrá el error (que es el segundo argumento de la suscribe() método).

    También es necesario tirar el error de la handleError() método. Así que en lugar de sólo devuelve el valor de cadena (return errMsg;), se debe usar return Observable.throw(errMsg);.

    • Me alegra ser de ayuda 🙂
  2. 0

    Que usted puede hacer

    .catch((response: Response) => {
                    return Observable.of(response);
                });

    que devolverá la respuesta para usted.

    • Esto no funciona para mí, pero la respuesta por encima de samAlvin hizo. Gracias, aunque, por la rápida respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here