我正在使用新语法来遵守RxJS 6 pipe()
。同样使用Angular6。我有一个处理http请求的服务,它通过管道传输map和catchError
来在连接错误的情况下显示祝酒词。但是,如果我添加catchError
,则会进入控制台,您在期望流的位置提供了“未定义”。您可以提供一个Observable,Promise,Array或Iterable。
getDataHttpRequest(url, returnType) {
return this.http.get(url, this.getRequestOptions())
.pipe(
map((response) => {
if(response){
if (returnType === 'object') {
return response[0] == undefined ? response : response[0];
} else {
return response;
}
}
}),
catchError((error):any => {
if(error instanceof HttpErrorResponse && error.status === 0){
//no connection error(either user has no connection or the server is down)
this.toastr.error('Chequee su conexión e intente de nuevo en unos momentos. Contáctenos para reportar el problema a <a href="mailto:dev@info.com">dev@info.com</a>',"Error de Conexión",{tapToDismiss:true, disableTimeOut: true});
}
throwError(`Connection Error: ${error}`);
})
);
}
如果我删除了catchError
函数,那么错误将在控制台中消失,因此这是一段令人头疼的代码。有什么想法可能有问题吗?
答案 0 :(得分:5)
catchError
的回调需要返回一个Observable(我认为它可能会引发一个异常,该异常也将转换为error
)。
catchError((error):any => {
if (whatever) {
...
return empty(); // just complete
}
return throwError(`Connection Error: ${error}`); // return another `error`
});