0

我正在尝试从本地存储中获取我的令牌并将其设置在标题中,但我不知道为什么它没有设置。

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

1 回答 1

2

header还没有准备好,因为它正在等待storage得到解决的承诺。当你打电话return new RequestOptions({ headers: header });时,header is not prepared. 流量是

  1. 让标头 = 新标头();
  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 来完成。您可以使用Observable.create(observer => { observer.next(new RequestOptions({headers: header})); }).

于 2017-04-19T18:38:43.180 回答