Angular - 等待Session Storage中的标记值

时间:2017-11-20 19:59:57

标签: javascript angular azure ecmascript-6 bearer-token

我正在使用Angular 2.0编写自定义HTTP提供程序,它允许我将承载令牌附加到API的每个HTTP请求。这基本上是ADAL JS的作用,但我不能在我的应用程序中使用该库。

问题在于 - 在我调用HTTP API之前,我需要等待单元两个令牌都存在于会话存储中。一旦我有了这两个,我就可以发送请求了。

我的HTTP Client类看起来像这样:

import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';

function getWindow(): any {
  return window;
}

@Injectable()
export class HttpClient {
  private _window: Window;

  constructor(private http: Http) { }

  createAuthorizationHeader(headers: Headers) {
    let keys = sessionStorage.getItem("adal.token.keys").split("|");

    let key1 = keys[0]; // web
    let key2 = keys[1]; // api

    if (!key1 || !key2) {
      // I NEED TO WAIT FOR BOTH KEYS!
    }

    let accessToken = sessionStorage.getItem("adal.access.token.key" + key2);
    headers.append('Authorization', 'Bearer ' + accessToken);
  }

  get(url) {
    let headers = new Headers();
    this.createAuthorizationHeader(headers);
    return this.http.get(url, {
      headers: headers
    });
  }

  post(url, data) {
    let headers = new Headers();
    this.createAuthorizationHeader(headers);
    return this.http.post(url, data, {
      headers: headers
    });
  }
}

我想避免使用Timer(setTimeout),原因很明显。我想使用ES6承诺类型的东西。

0 个答案:

没有答案