Angular 2 - метод запроса Http, который вызывается как в случае успеха, так и в случае ошибки

Все мои запросы Backend API возвращают новую информацию о токенах в заголовках, даже если они вызывают исключения. В следующем запросе мне нужно отправить эту новую информацию о токене.

Итак, я пытаюсь найти уникальный и стандартный способ сделать это:

let requestOptions = new RequestOptions(Object.assign({
  method: method,
  url: environment.apiHost + url,
  body: body,
  headers: authenticatedRequest ? this.requestService.getAuthHeaders() : this.requestService.getJsonHeaders(),
  withCredentials: authenticatedRequest
}));

this.http.request(new Request(requestOptions))
    .map((res:Response) => this.storageService.setAuthInfo(res.headers))
    .catch((error:any) => this.storageService.setAuthInfo(res.headers));

На данный момент мне нужно установить новый токен в методах map и catch. Есть ли метод, который вызывается как в случае успеха, так и в случае ошибки, где я мог бы установить новую информацию о токене (this.storageService.setAuthInfo(res.headers))?


person Pasp Ruby    schedule 23.11.2016    source источник


Ответы (1)


Вы можете использовать .finally вместо наблюдаемого, но с помощью функции finally вы не получите контроль над response вещами. Так что лучше иметь map функцию для наблюдаемых и оттуда передавать headers информацию в какую-то переменную. Затем передайте это из вызова метода this.storageService.setAuthInfo finally.

Код

myRequest(){
    let header;
    this.http.request(new Request(requestOptions))
        .map((res:Response) => { 
           //take headers to pass it when request succeed/fails
           header = res.headers;
           return res.json();
        )
        .finally(() => this.storageService.setAuthInfo(headers))
}
person Pankaj Parkar    schedule 23.11.2016
comment
Не работает. переменная заголовков не определена в .finally(). Я предполагаю, что метод карты вызывается только при успешном возврате. - person Pasp Ruby; 23.11.2016