我的服务中有一个函数,该函数返回一个Observable(http请求),该函数需要使用特殊标记进行转换。所以-在获得此功能之前,我需要获取令牌才能发出请求。
我一直在寻找链接这些请求或获取令牌的方法,以确保在发出该请求之前就已经存在该令牌,但是因为它是在构造函数中完成的,因此当您第一次加载令牌时不存在,HTTP请求失败。
我目前在服务中有一个if块,如下所示:
if (!this.activeDirectoryToken) {
this.adalService
.acquireToken('https://graph.windows.net')
.subscribe(token => {
this.activeDirectoryToken = token;
// RETURN OBS LOGIC OF THE SECOND HTTP REQUEST USING THE TOKEN
});
} else {
// RETURN OBS LOGIC OF THE SECOND HTTP REQUEST USING THE TOKEN
但是,当然,如果我尝试订阅该函数并且if块触发,它将抛出错误,因为该类型不存在'subscribe'。
我还将令牌存储在redux存储中,并在服务的构造函数中对其进行订阅,并且如果有null / false,则在那里还有另一个if块来请求它。
尽管如此,由于未设置令牌,因此第一个请求仍然失败。
答案 0 :(得分:0)
第一个方法返回令牌。如果已被缓存,则只需返回当前令牌,否则获取一个新令牌并将其缓存。
之后,您可以使用switchMap
进行第二部分的http请求并进行订阅。
getToken(): Observable<string> {
if (this.activeDirectoryToken)
return Observable.of(this.activeDirectoryToken);
return this.adalService
.acquireToken('https://graph.windows.net')
.pipe(
do(token => this.activeDirectoryToken = token)
);
}
secondPart(){
this.getToken().pipe(
switchMap( token => SECOND HTTP REQUEST USING THE TOKEN)
)
.subscribe(...);
}
注意:未经测试