什么是从本地存储访问数据并在Ionic 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 });
  }

您的header尚未准备好,因为它正在等待获得storage承诺得到解决。调用return new RequestOptions({ headers: header });时,header is not prepared。流量为

  1. 让标头=新标头((;
  2. 等待存储解决令牌。尚未完成,仍在3.
  3. 之前进行。
  4. 返回新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 }));
      });
    });
}

此外,如果发生错误,这里还有很多错误处理要做。请参阅此信息。

注意:这也可以通过创建可观察到。您可以使用Observable.create(observer => { observer.next(new RequestOptions({headers: header})); })

相关内容

  • 没有找到相关文章

最新更新