从本地存储访问数据并在离子2中发送到服务器的正确方法是什么?

时间:2017-04-19 18:14:47

标签: angular ionic-framework ionic2 angular2-services angular-local-storage

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

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

1 个答案:

答案 0 :(得分:2)

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

  1. let header = new Headers();
  2. 等待存储以解析令牌。尚未完成,仍然进入3。
  3. 返回新的RequestOptions({headers:header});
  4. 你可以回报承诺。像这样:

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

    执行此操作