gpt4 book ai didi

angular - 如何在使用 subscribe() 处理之前转换 Http 错误?

转载 作者:行者123 更新时间:2023-12-04 12:49:56 25 4
gpt4 key购买 nike

我有一个 angular2 组件,它使用的服务使用 Http 来发出 HTTP 请求。

服务看起来像这样:

export class AuthenticateService {

constructor(private http: Http) {}

public authenticateUser(username: string, password: string) : Observable<User> {
return this.http.post("http://localhost:3002/admin/login", {
username: username, password: password
})
.map((res: Response) => {
//I can fiddle with non-error responses here, but if an error happens then this doesnt get called
return res.json() as User;
});
}

组件看起来像这样:

export class LoginFormComponent {

userRequest : Observable<User>;

constructor(private _authenticateService: AuthenticateService, private _router: Router) {}

doLogin() : void {
this.userRequest = this._authenticateService.authenticateUser(this.form.username, this.form.password);

this.userRequest.subscribe(user => {
this._router.navigateByUrl("/user");
}, error => {
//this is where I just want the 'errorMessage' property, not the entire ResponseBody object
console.log("Error object looks like: ", error);
this.errorMessage = error.json().errorMessage;
});
}

服务返回组件订阅的 Observable。但是,当执行 error 函数时(由于 HTTP 请求返回非 200 状态代码),我将完整的 HTTP 响应对象作为 error 参数传递给错误处理函数。

如何在服务级别将其转换为仅返回 errorMessage 部分?我想在我的错误处理函数中处理的只是字符串错误消息,它不应该处理整个 HTTP 响应对象,甚至不需要知道 HTTP 是一个东西。

我已经习惯了 Promises,并且仍在努力了解 RxJS。

最佳答案

您可以使用 catch() 运算符:

this.userRequest
.catch(e => Observable.throw(e.json().errorMessage))
// or just .catch(e => throw e.json().errorMessage)
.subscribe(user => {
this._router.navigateByUrl("/user");
}, error => {
//this is where I just want the 'errorMessage' property, not the entire ResponseBody object
console.log("Error object looks like: ", error);
this.errorMessage = error;
});

关于angular - 如何在使用 subscribe() 处理之前转换 Http 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40448412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com