【问题标题】:Angular2 synchronous promiseAngular2 同步承诺
【发布时间】:2016-04-11 07:48:46
【问题描述】:

Ionic 2 中,用于访问localStorageget 函数返回一个承诺。以下代码的问题是 headers 对象在附加 Authorization 键之前被返回。我怎样才能修改下面的函数,使得 headers 对象仅在 promise 解决后才返回。

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

【问题讨论】:

    标签: javascript angular angular-promise ionic2


    【解决方案1】:

    我会这样重构你的代码:

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

    【讨论】:

    • 函数的返回类型也应该是<Promise>,但我只是想让函数返回Headers对象。由于我在调用者函数中创建了一个自定义 request 对象,因此如果我必须在其中处理另一个承诺,代码会变得更加混乱。
    • 简短的回答是:你不能 ;-) 较长的回答是你可以利用承诺链...我用这种方法的示例更新了我的答案
    • 暂时我通过使用仅返回 String 类型的本机 window.localStorage.getItem('authToken') 函数解决了这个问题。但我应该坚持使用框架并在某个时候对其进行重构。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2017-05-15
    相关资源
    最近更新 更多