У меня есть общая служба в моем приложении, которая обрабатывает аутентификацию, я пытаюсь абстрагировать логику своего компонента как можно дальше от HTTP-запросов, однако каждая часть документации, которую я видел, требует, чтобы я возвращал httpClient Observable, и подпишитесь на него и выполните всю логику для обработки результатов и ошибок внутри компонента.
Мой текущий сервисный код полностью сломан, но выглядит он так:
userLogin(email: String, password: String) {
const body = { email: email, password: password };
return this.httpClient.post('http://localhost/users/login', body).subscribe(
this.handleResults,
this.handleErrors
);
}
handleResults(results: any) {
if (results.errors) {
console.log(results.errors);
} else {
return results;
}
}
handleErrors(err: HttpErrorResponse) {
if (err.error instanceof Error) {
// A client-side or network error occurred. Handle it accordingly.
console.log('A ', err.status, ' error occurred:', err.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong,
console.log('Could not connect to server.');
console.log('Backend returned code ' + err.status + ', body was: ' + JSON.stringify(err.error));
}
}
И в идеале в компонентном модуле у меня было бы что-то вроде функции обратного вызова, которая вызывается, когда ответ готов. Кажется, что я пытаюсь идти вразрез с шаблонами Angular, но в то же время я не могу понять, почему Angular требует обработки ошибок для общих ошибок http, выполняемых на уровне компонентов.
Поэтому я полагаю, что основной вопрос заключается в следующем: как мне обрабатывать ошибки httpClient внутри службы, а не в отдельных компонентах?