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

Angular 在ionic 2中,从本地存储访问数据并发送到服务器的正确方法是什么?,angular,ionic-framework,ionic2,angular2-services,angular-local-storage,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 Hea

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

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

您的
标题
尚未准备好,因为它正在等待获得
存储
承诺以得到解决。调用
时返回新的RequestOptions({headers:header}),未准备
标题
。流程是

  • let header=新的Headers()
  • 正在等待存储解析令牌。尚未完成,仍将进行到3
  • 返回新的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(observator=>{observator.next(newrequestoptions({headers:header}));}
    来实现这一点,因为您的
    头还没有准备好,因为它正在等待得到
    存储
    的解决。调用
    时返回新的RequestOptions({headers:header}),未准备
    标题
    。流程是

  • let header=新的Headers()
  • 正在等待存储解析令牌。尚未完成,仍将进行到3
  • 返回新的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(observator=>{observator.next(newrequestoptions({headers:header}));})
    来实现这一点