Я написал метод входа в систему, который отправляет сообщение 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)
и вообще не запуская код asyn c.
Спасибо за любые советы заранее.
Редактировать: Если я вас правильно понимаю, возвращать ошибку, завернутую в обещание, не нужно и / или может вызвать проблемы. Я должен признать, что я действительно не понимал, что подписка создаст Observable.
(error) => {
if (error.status === 403) {
localStorage.removeItem(authTokenIdentifier);
throwError(error.message);
} else {
throwError(error.message);
}
},
Я попытался сгенерировать ошибку напрямую с тем же результатом.