Parte de mi código:
import {Injectable} from 'angular2/core';
import {Http, Headers, Request, Response} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class myClass {
constructor(protected http: Http) {}
public myMethod() {
let request = new Request({
method: "GET",
url: "http://my_url"
});
return this.http.request(request)
.map(res => res.json())
.catch(this.handleError); // Trouble line.
// Without this line code works perfectly.
}
public handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
myMethod() produce una excepción en la consola del navegador:
EXCEPCIÓN ORIGINAL: TypeError: this.http.request (...). Map (...). Catch no es una función

throw()función. Agregué esta línea en suimport 'rxjs/Rx';lugar. Ahora todos los operadores funcionan correctamente..catchrealmente funciona? Eso.subscribe()funciona seguro.EXCEPTION: TypeError: Observable_1.Observable.throw is not a function. Puede corregirse con la respuesta @MattScarpino o en este caso desde el plunker como dije anteriormente: angular.io/resources/live-examples/server-communication/ts/…import 'rxjs/add/observable/throw';y no importes todo, es demasiado grande.Nuevo servicio actualizado para usar HttpClientModule y RxJS v5.5.x :
Servicio anterior, que utiliza el HttpModule en desuso:
Yo uso
.do()( ahora.tap()) para la depuración.Cuando hay un error de servidor, el
bodydelResponseobjeto consigo desde el servidor que estoy usando (lite-servidor) contiene sólo texto, de ahí la razón por la que utilizoerr.text()anteriormente en lugar deerr.json().error. Es posible que deba ajustar esa línea para su servidor.Si
res.json()genera un error porque no pudo analizar los datos JSON,_serverErrorno obtendrá unResponseobjeto, de ahí el motivo de lainstanceofverificación.En esto plunker, cambie
urla./data/data.junkpara generar un error.Los usuarios de cualquiera de los servicios deben tener un código que pueda manejar el error:
fuente
Hay varias formas de hacer esto. Ambos son muy simples. Cada uno de los ejemplos funciona muy bien. Puede copiarlo en su proyecto y probarlo.
El primer método es preferible, el segundo está un poco desactualizado, pero hasta ahora también funciona.
1) Solución 1
2) Solución 2. Es antigua, pero aún funciona.
fuente
Las funciones RxJS deben importarse específicamente. Una manera fácil de hacer esto es importar todas sus características con
import * as Rx from "rxjs/Rx"Luego, asegúrese de acceder a la
Observableclase comoRx.Observable.fuente
en la última versión de uso angular4
importará todas las cosas requeridas.
fuente