我写了一个登录方法,该方法将http帖子发送到授权服务。如果凭据错误,则服务将返回403。
我的想法是返回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);
}
},
() => {
},
);
}
async login(): Promise<void> {
this.authService.login(this.username, this.password)
.then( () => console.log("SUCCESS!"))
.catch(() => console.log("ERROR!"));
}
我已经尝试将authService.login调用包装在Try / Catch中,并使用await进行调用
await this.authService.login(this.username, this.password)
并且根本不运行代码异步。
谢谢您的任何建议。
编辑: 如果我正确地理解了您,则无需返回包装在Promise中的错误,并且/或者会导致问题。我必须承认,我不太了解订阅会创建一个Observable。
(error) => {
if (error.status === 403) {
localStorage.removeItem(authTokenIdentifier);
throwError(error.message);
} else {
throwError(error.message);
}
},
我尝试直接抛出错误,结果相同。