2016-11-23 41 views
0

我的所有后端API请求都会在头中返回新的令牌信息,即使它们会引发异常。在下一个请求中,我需要发送这些新的令牌信息。Angular 2 - 在成功和错误情况下都调用的Http请求方法

所以我试图找出这样做的唯一标准方式:

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)); 

现在我必须设置在地图中查看和捕获方法的新令牌。有没有一种方法可以在成功和错误的情况下调用新的令牌信息(this.storageService.setAuthInfo(res.headers))?

回答

0

你可以使用.finally而不是可观察的,但通过使用finally函数,你不能控制response的东西。所以最好有map功能在可观察的&从那里取headers信息给一些变量。然后从finallythis.storageService.setAuthInfo方法调用传递。

代码

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)) 
} 
+0

没有工作。头文件变量在.finally()上是未定义的。我想只有在成功返回时才会调用map方法。 –

+0

仅仅是出现错误情况吗? –

+0

是的,发生错误时不会设置标题。 –

相关问题