[英]Angular7 service - returning observable that contains the data from another observable but subscribing to that second Observable within component?
我的服務中有一個函數,該函數返回一個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塊觸發,它將拋出錯誤,因為該類型將不存在“訂閱”。
我還將令牌存儲在redux存儲中,並在服務的構造函數中對其進行訂閱,並且在其中有另一個if塊,以在令牌為null / false時對其進行請求。
但是,由於沒有設置令牌,因此第一個請求仍然失敗。
第一種方法返回令牌。 如果已被緩存,則只需返回當前令牌,否則獲取一個新令牌並將其緩存。
之后,您可以使用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(...);
}
注意:未測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.