Javascript 在http.post中使用Promise.reject()进行错误处理
我编写了一个登录方法,它向授权服务发送http post。如果凭据错误,服务将返回403Javascript 在http.post中使用Promise.reject()进行错误处理,javascript,angular,typescript,http,post,Javascript,Angular,Typescript,Http,Post,我编写了一个登录方法,它向授权服务发送http post。如果凭据错误,服务将返回403 我的想法是返回一个Promise.reject()并让调用方捕获拒绝以显示警报。我的问题是,调用方法不能正确处理错误 我的错误程序有什么地方做错了吗 public async login(username: string, password: string): Promise<void> { let authToken = null; const obj = this; const
我的想法是返回一个Promise.reject()并让调用方捕获拒绝以显示警报。我的问题是,调用方法不能正确处理错误 我的错误程序有什么地方做错了吗
public async login(username: string, password: string): Promise<void> {
let authToken = null;
const obj = this;
const url = this.backendService.getAuthServiceURL(username, password);
this.http.post<any>(url, { }, {
headers: new HttpHeaders(),
observe: 'response',
}).subscribe(
(result) => {
authToken = result.headers.get('Authorization');
localStorage.setItem(authTokenIdentifier, authToken);
obj.username = username;
localStorage.setItem(usernameIdentifier, username);
},
(error) => {
if (error.status === 403) {
localStorage.removeItem(authTokenIdentifier);
return Promise.reject(error.message);
} else {
return Promise.reject(error.message);
}
},
() => {
},
);
}
并且根本不异步运行代码
谢谢你事先提出的任何建议
编辑:
如果我理解正确,返回包含在承诺中的错误是不必要的,并且/或者可能导致问题。我必须承认,我真的不明白subscribe会创建一个可观察的
(error) => {
if (error.status === 403) {
localStorage.removeItem(authTokenIdentifier);
throwError(error.message);
} else {
throwError(error.message);
}
},
我试图直接抛出错误,但结果相同 你将可观察到的东西包装在承诺中有什么原因吗?我强烈建议不要将承诺包装在可观察到的东西中,这会导致你所看到的意外结果。如果您愿意,您可以通过rxjs observable上的
.toPromise()
将observable转换为承诺。“我的想法是返回一个承诺。拒绝()”-但观察者是链的末端。返回值(如果有的话)不会被任何人使用。很抱歉再次挖掘它,我没有太多时间来处理它。你们谁能看看我的更新吗?非常感谢。
await this.authService.login(this.username, this.password)
(error) => {
if (error.status === 403) {
localStorage.removeItem(authTokenIdentifier);
throwError(error.message);
} else {
throwError(error.message);
}
},