在可观察中<Response>找不到捕获错误



我正试图从HTTP请求中捕获错误,并根据错误代码向用户显示错误消息。为了实现这一点,我使用了rxjs中的catchError运算符。

但我得到了这个错误,它声明属性"catchError"在类型Observable<响应>

下面是我的包.json

"dependencies": {
"@angular/animations": "^6.0.3",
"@angular/common": "^6.0.3",
"@angular/compiler": "^6.0.3",
"@angular/core": "^6.0.3",
"@angular/forms": "^6.0.3",
"@angular/http": "^6.0.3",
"@angular/platform-browser": "^6.0.3",
"@angular/platform-browser-dynamic": "^6.0.3",
"@angular/router": "^6.0.3",
"bootstrap": "^3.3.7",
"core-js": "^2.5.4",
"rxjs": "^6.0.0",
"zone.js": "^0.8.26"

以下是我在正在实现的处理http请求的服务中使用的导入。

import { catchError } from 'rxjs/operators';
import { Injectable } from '@angular/core';
import { Http } from '../../../node_modules/@angular/http';
import { Observable } from 'rxjs';
import { AppError } from './../common/app-error';
import { NotFoundError } from '../common/not-found-error';

这是一个函数,我从服务器上删除一篇帖子,并将预期和意外错误的自定义错误返回到我的组件。

deletePost(id:number){
return this.http.delete(this._url+"/"+id).catchError(
(error:Response)=>{
if(error.status===404){
return Observable.throw(new NotFoundError());
}
return Observable.throw(new AppError(error));
}
);

}

但当我试图删除一篇帖子时,我会收到以下错误。

this.http.delete(...).catchError is not a function

我参考了以下针对rxjs的API,根据我的理解,catchError函数需要一个Observable作为输入。如果有人能帮我解决这个问题,我将不胜感激。谢谢。

我想明白了。我需要使用pipe((运算符,然后才能使用从rxjs 6开始的catchError之类的运算符。因此,应该像下面这样修改代码。

deletePost(id:number){
return this.http.delete(this._url+"/"+id)
.pipe(
catchError(
(error:Response)=>{
if(error.status===404){
return Observable.throw(new NotFoundError());
}
return Observable.throw(new AppError(error));
}
));}

更新

需要做一些细微的更改才能使其正常工作,因为在rxjs6中throw函数的实现也发生了变化。现在必须使用throwError((函数,而不是从observable中抛出error函数。上述任务的实施情况如下。

deletePost(id:number){
return this.http.delete(this._url+"/"+id)
.pipe(
catchError(
(error:Response)=>{
if(error.status===404){
console.log(error);
return throwError(new NotFoundError(error));
}
return throwError(new AppError());
}
));}

我希望有人会发现这很有帮助,并节省几个小时的时间。干杯

相关内容

最新更新