我有一项用于更新产品的服务,但是对该产品的订阅返回未定义。保证工作正常 这是我的代码 服务
updateProduct (id,product): Observable<any> {
return this.http.put(this.product_url + 'products/' + id, product, {observe : 'response'})
.pipe(
catchError(this.handleError<any>('updateProduct'))
);
}
private handleError<T> (operation = 'operation', result?: T) {
return (error: any): Observable<T> => {
this.toastr.error(error); // log to console instead
this.toastr.error(`${operation} failed: ${error.message}`);
return of(result as T);
};
}
组件
this.productService.updateProduct(this.myid,product).subscribe(data =>{
console.log(data)
this.response = data
console.log(this.response)
})
答案 0 :(得分:0)
如果handleError方法返回未定义并且没有引发错误,如果原始响应中存在错误,则可以继续执行管道,然后将调用lambda并使用未定义的数据。
https://rxjs-dev.firebaseapp.com/api/operators/catchError
在Angular文档的示例中,请注意handleError函数如何返回一个新的observable(catchError运算符将继续执行您返回的任何内容):
Table2(recid, view, userid)
答案 1 :(得分:0)
您可以尝试删除catchError运算符和管道,看看是否有任何返回。另外,handleError有什么作用?
<header><div>
<h1>HTML Ipsum Presents</h1>
<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci,
sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>
</div>
</header>
答案 2 :(得分:0)
发生问题的原因是处理程序方法捕获了错误。因此最好使用拦截器进行全局错误处理
答案 3 :(得分:-3)
我会这样:
updateProduct (id,product): Observable<any> {
return this.http.put(this.product_url + 'products/' + id, product);
}
并在拦截器中全局处理一些错误。并让任何形式的错误(如错误的request(400)localy)出现。
onSubmit(){
myservice.updateProduct(...).subscribe(response=>{
//success
},error=>{
//show form errors
});
}