在 Observable<Response> 中找不到 catchError
catchError is not found in Observable<Response>
我正在尝试从 HTTP 请求中捕获错误,并根据错误代码向 user.To 显示错误消息,实现此目的我正在使用 rxjs 的 catchError 运算符。
但我收到此错误,指出 属性 'catchError' 在类型 Observable < Response >
上不存在
下面是我的package.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';
这是我从服务器删除 post 和 return 组件预期和意外错误的自定义错误的功能。
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));
}
);
}
但是当我尝试删除 post 时,出现以下错误。
this.http.delete(...).catchError is not a function
我参考了下面的 API for rxjs ,根据我的理解,其中 catchError 函数期望一个 Observable 作为输入。如果有人可以帮助我解决这个问题,我将不胜感激。谢谢。
我明白了。从 rxjs 6 开始,我需要先使用 pipe() 操作符,然后才能使用像 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 中抛出函数的实现也发生了变化。现在必须使用 throwError() 函数,而不是从 observable 中抛出错误函数。上述任务的实现如下。
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());
}
));}
我希望有人会觉得这很有帮助并节省他们几个小时的时间。干杯!
我正在尝试从 HTTP 请求中捕获错误,并根据错误代码向 user.To 显示错误消息,实现此目的我正在使用 rxjs 的 catchError 运算符。
但我收到此错误,指出 属性 'catchError' 在类型 Observable < Response >
上不存在下面是我的package.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';
这是我从服务器删除 post 和 return 组件预期和意外错误的自定义错误的功能。
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));
}
);
}
但是当我尝试删除 post 时,出现以下错误。
this.http.delete(...).catchError is not a function
我参考了下面的 API for rxjs ,根据我的理解,其中 catchError 函数期望一个 Observable 作为输入。如果有人可以帮助我解决这个问题,我将不胜感激。谢谢。
我明白了。从 rxjs 6 开始,我需要先使用 pipe() 操作符,然后才能使用像 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 中抛出函数的实现也发生了变化。现在必须使用 throwError() 函数,而不是从 observable 中抛出错误函数。上述任务的实现如下。
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());
}
));}
我希望有人会觉得这很有帮助并节省他们几个小时的时间。干杯!