簡體   English   中英

Angular7服務-返回包含來自另一個可觀察對象的數據但包含該組件中第二個可觀察對象的數據的可觀察對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM