我正在使用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承诺类型的东西。