javascript - observable_1 - rxjs_observable__ webpack_imported_module_2__ observable throw
¿Cómo lanzar un error observable manualmente en angular2? (6)
Estoy trabajando en la aplicación angular2 en la que hago una llamada de descanso a través de HTTp como se muestra a continuación:
login(email, password) {
let headers = new Headers();
headers.append(''Content-Type'', ''application/x-www-form-urlencoded'');
let options = new RequestOptions({ headers: headers });
let body = `identity=${email}&password=${password}`;
return this.http.post(`${this._configService.getBaseUrl()}/login`, body, options)
.map((res: any) => {
let response: any = JSON.parse(res._body);
if (response.success == 0) {
Observable.throw(response); // not working
} else if (response.success == 1) {
console.log(''success'');
localStorage.setItem(''auth_token'', ''authenticated'');
this.loggedIn = true;
return response;
}
});
}
básicamente quiero que mi componente obtenga respuesta y error en mi llamada de suscripción.
es decir
this._authenticateService.login(this.loginObj[''identity''],this.loginObj[''password'']).subscribe(
(success)=>{
this.credentialsError=null;
this.loginObj={};
this._router.navigate([''dashboard'']);
},
(error)=>{
console.log(error);
this.credentialsError=error;
}
);
pero mi api siempre devuelve el éxito como lo definí de esa manera.
Así que quiero saber cómo puedo enviar un mensaje de error si response.success == 0
, para que se pueda acceder dentro del argumento de error de mi devolución de llamada de suscripción.
La mayoría de mis problemas estaban relacionados con las importaciones, así que aquí está el código que me funcionó ...
import {_throw} from ''rxjs/observable/throw'';
login(email, password) {
...
return this.http.post(`${this._configService.getBaseUrl()}/login`, body, options)
.map((res: any) => {
...
if (response.success == 0) {
_throw(response);
} else if (response.success == 1) {
...
}
});
}
Esta será la solución si te enfrentas a errores como ...
ERROR TypeError: WEBPACK_IMPORTED_MODULE_2_rxjs_Observable .Observable.throw no es una función
Utilizar el operador de captura
this.calcSub = this.http.post(this.constants.userUrl + "UpdateCalculation", body, { headers: headers })
.map((response: Response) => {
var result = <DataResponseObject>response.json();
return result;
})
.catch(this.handleError)
.subscribe(
dro => this.dro = dro,
() => this.completeAddCalculation()
);
Y maneja el error así:
private handleError(error: Response) {
console.error(error); // log to console instead
return Observable.throw(error.json().error || ''Server Error'');
}
Ya sea
throw response;
o
return Observable.throw(response); // not working
con rxjs 6
import { throwError } from ''rxjs'';
throwError(''hello'');
rxjs 6
import { throwError } from ''rxjs'';
if (response.success == 0) {
return throwError(response);
}
rxjs 5
import { ErrorObservable } from ''rxjs/observable/ErrorObservable'';
if (response.success == 0) {
return new ErrorObservable(response);
}
Lo que devuelva con ErrorObservable
depende de usted
if (response.success == 0) {
throw Observable.throw(response);
}