Angular2 同步承诺

Angular2 synchronous promise

Ionic 2 中,get 函数用于访问 localStorage returns 承诺。下面代码的问题是 headers 对象在附加 Authorization 键之前就被返回了。我如何修改以下函数,以便仅在解决承诺后才返回 headers 对象。

private _createAuthHeaders(): Headers {
    let headers = new Headers({
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    });
    this.local.get('authToken').then(res=>{
      headers.append('Authorization', res);
    }, err=>{
      headers.append('Authorization', '');
    });
    return headers;
}

我会这样重构你的代码:

private _createAuthHeaders(): Headers {
  let headers = new Headers({
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  });
  this.local.get('authToken').then(res=>{
    headers.append('Authorization', res);
    return headers;
  }, err=>{
    headers.append('Authorization', '');
    return headers;
  });
}

你可以像这样使用这个方法:

this._createAuthHeaders().then(headers => {
  // do something like setting the headers on the request
  // and execute it...
});

编辑

您可以利用 promise 链来使您的代码更简洁。这是一个示例:

this._createAuthHeaders().then(headers => {
  // do something like setting the headers on the request
  // and execute it...
  return this.http.get('some url', { headers: headers }).toPromise();
}).then(result => {
  // handle result
});