0

로컬 저장소에서 토큰을 가져 와서 헤더에 설정하려고하지만 토큰이 설정되지 않은 이유를 알 수 없습니다. 이 storage 약속 해결 얻을 얻을 기다리고 있기 때문에 귀하의 header로컬 스토리지의 데이터에 액세스하고 이온 2의 서버로 보내는 올바른 방법은 무엇입니까?

getMurals() { 
     return this.http.get(AppSettings.API_ENDPOINT+'/murals', this.getHeader()) 
      .map((response: Response) => response.json()); 
    } 

private getHeader() { 
    let header = new Headers(); 
    this.storage.get('token').then((token)=>{ 
     if(token){ 
     header.append('authorization',token); 
     header.append('Content-Type','application/x-www-form-urlencoded'); 
     } 
    }) 
    return new RequestOptions({ headers: header }); 
    } 

답변

2

이 아직 준비되지 않았습니다. return new RequestOptions({ headers: header });으로 전화하면 header is not prepared입니다. 흐름은

  1. 입니다. let header = new Headers();
  2. 저장소가 토큰을 확인하기를 기다리는 중입니다. 아직 완료되지 않았으므로 3으로 진행됩니다.
  3. return new RequestOptions ({headers : header});

약속을 전달할 수 있습니다. 이와 같이 :

getMurals() { 
    this.getHeader().then(data => { 
     return this.http.get(AppSettings.API_ENDPOINT+'/murals', data) 
     .map((response: Response) => response.json()); 
    }) 
} 

private getHeader() { 
    let header = new Headers(); 
    return new Promise((resolve) => { 
     this.storage.get('token').then((token)=>{ 
     if(token){ 
      header.append('authorization',token); 
      header.append('Content-Type','application/x-www-form-urlencoded'); 
     } 
     resolve(new RequestOptions({ headers: header })); 
     }); 
    }); 
} 

또한 오류 발생시 많은 오류 처리가 이루어집니다. 더 명확하게하기 위해 this을 참조하십시오.

참고 : 이것은 관측 가능을 만들면 수행 할 수도 있습니다. Observable.create(observer => { observer.next(new RequestOptions({headers: header})); })을 사용하면됩니다.