我做了错误处理程序代码,但在catch中出现了错误。未定义的方法
这是我的serivce.ts代码。
import { Injectable } from "@angular/core";
import { HttpClient, HttpErrorResponse } from "@angular/common/http";
import { user } from "./user";
import { Observable } from "rxjs";
import "rxjs/add/operator/catch";
import "rxjs/add/Observable/throw";
@Injectable({
providedIn: "root"
})
export class DemoService {
private url: string = "/assets/demo/user.json";
constructor(private http: HttpClient) {}
getuserdetails(): Observable<user[]> {
return this.http.get<user[]>(this.url).catch(this.errorHandler);
}
errorHandler(error: HttpErrorResponse) {
return Observable.throw(error.message || "server error.");
}
}这是我的app.component.ts文件代码
public userdetails = [];
public errorMsg;
constructor(private user: DemoService) {}
ngOnInit() {
this.user
.getuserdetails()
.subscribe(
$data => (this.userdetails = $data),
error => (this.errorMsg = error)
);
} 我在接球时出错了。错误信息是属性'catch‘在类型’可观察‘上不存在。
发布于 2019-10-09 05:50:08
为此,您可以在catchError中使用rxjs/operators。试一试如下。
import { catchError } from 'rxjs/operators';
export class DemoService {
getuserdetails(): Observable<user[]> {
return this.http.get<user[]>(this.url)
.pipe(catchError(this.errorHandler))
}
errorHandler(error: HttpErrorResponse) {
return Observable.throw(error.message || "server error.");
}
}发布于 2020-06-26 07:09:57
在rxjs的最后一个版本中,您应该使用:
return return this.http.get<user[]>(this.url)
.subscribe((r:Author) => console.log("GOOD"),
err => console.log("ERROR))发布于 2019-10-09 05:29:25
在可观察的情况下捕捉错误的最佳方法是:
this.http.get<user[]>(this.url).pipe(
tap(),
catchError(err => { return this.errorHandler(err) }
)如果this.http.get()是一个承诺,那么就像您在代码中所做的那样,.catch(...)是可以的。如果您使用catchError(...),请在管道末端或finalize(..)之前使用它。
在没有.pipe()和您之前,链接操作就像在承诺中那样,所以它们将名称.then()改为.then(),并将.catch()更改为catchError(),这样程序员就知道它是可观察的或有希望的。
https://stackoverflow.com/questions/58297464
复制相似问题