В моем приложении Angular2 у меня есть api.service с методом sendRequest , который должен делать следующее:
- Отправляет запрос на сервер
- Возвращает обещание звонящему (я хочу, чтобы звонящие получали только успешные ответы)
- Если произошла ошибка, обработайте ошибку локально (перейдите к пользователю, чтобы войти в систему или показать всплывающее окно)
Я реализовал его с помощью Promise:
sendRequest(method: string, url: string, data: any) : Promise<any> {
return this.http.request(method, url, {
body: data,
headers: {
'Accept': 'application/json, text/plain, */*',
'Authorization': 'bearer ' + token,
'Content-Type': 'application/json;charset=UTF-8'
}
}).toPromise().catch((res) => this.handleError(res));
}
handleError(response: any) {
if (response.status === 401 || response.status === 403) {
this.tokenService.deleteToken();
this.router.navigate(['login']);
}
// Show popup etc.
...
}
Я хотел бы заменить обещание на наблюдаемое:
sendRequest(method: string, url: string, data: any) : Observable<any> {...}
Пожалуйста, посоветуйте, как это сделать.Спасибо.
EDIT 1 : я нашел примеры, которые обрабатывали ответ, а затем передавали некоторый результат наблюдателю.Это не то, что мне нужно.Если возникает ошибка, наблюдатель не должен быть уведомлен вообще.Наблюдатели должны быть уведомлены, только если получен успешный ответ.В случае возникновения ошибки ее следует обработать только внутри api.service .