Javascript 财产';订阅';不存在于类型';运算符函数<;{},{}>';角度误差7

Javascript 财产';订阅';不存在于类型';运算符函数<;{},{}>';角度误差7,javascript,angular,Javascript,Angular,在学习如何处理Angular Typescript中的错误时,脚本抛出了一个错误 类型“OperatorFunction”上不存在属性“subscribe” 在我的组件的这个代码块中 返回组件代码使用的可观察对象的服务代码为 newPost(post) { return ( this.http.post(this.url, post), catchError((error: Response) => error.status === 400 ? Observab

在学习如何处理Angular Typescript中的错误时,脚本抛出了一个错误

类型“OperatorFunction”上不存在属性“subscribe” 在我的组件的这个代码块中

返回组件代码使用的可观察对象的服务代码为

newPost(post) {
return (
  this.http.post(this.url, post),
  catchError((error: Response) =>
    error.status === 400
      ? Observable.throw(new BadInput(error))
      : Observable.throw(new AppError(error))
  )
);
}

我需要解决错误的帮助,以及关于抛出错误的原因或如何最好地实现错误处理的解释。

您应该使用管道操作符,后跟map操作符,后跟catchError操作符。您必须从rxjs/operators导入map操作符和catchError操作符。请参阅下文:

.pipe(
    mergeMap(resp => {
        // add logic
    }),
    catchError(err => {
        // add handling 
    })
);

newPost
看起来一点也不对劲,您是否缺少一个
.pipe
?您使用的是逗号运算符,而不是实际将
catchError
应用于可观察对象。当我尝试使用
将catchError应用于可观察对象时。catchError
我得到一个错误,该错误
属性“catchError”在类型“observable”上不存在。
即使我从“rxjs”导入了
可观察}然后阅读,因为看起来你已经习惯了6级之前的处理方式,但是插入一个随机的逗号是没有帮助的。好吧,我现在就来读这个,你需要使用.pipe(),然后将catchError放在里面,就像你会小睡或过滤一样,但没有点。因此,如果管道中有另一个方法,则逗号是正确的。
.pipe(
    mergeMap(resp => {
        // add logic
    }),
    catchError(err => {
        // add handling 
    })
);