我正在尝试从本地存储中获取令牌并将其设置在标头中,但我不知道为什么它没有设置。
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 });
}
答案 0 :(得分:2)
您的header
尚未准备好,因为它正在等待storage
承诺得到解决。当您致电return new RequestOptions({ headers: header });
时,header is not prepared
。流程是
你可以回报承诺。像这样:
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来完成。您可以使用Observable.create(observer => { observer.next(new RequestOptions({headers: header})); })
。