簡體   English   中英

返回可觀察位首先在 Angular 11 / RxJS 7 中獲取新令牌

[英]Return observable bit first get new token in Angular 11 / RxJS 7

Angular / RxJS 試圖在瘋狂的壓力下學習它,我真的很艱難!

如果我要返回這個 Observable:

 return this.apiProvider.Tracker(parameters).map((res: any) => {
      let response = res.Result;
      return response;
  }).catch(error => {
      this.presentToast('An error has occurred. If this problem persists, please contact us.', false);
      let res: ConsentResponse = null
      return Observable.of(res);
  });

它工作得很好。 Tracker function 只是一個簡單的 http.post 返回,像這樣:

Tracker(params) {

I NEED TO GET A NEW TOKEN HERE FIRST BY DOING ANOTHER POST REQUEST - and that is my question :-)
var auth = 'Bearer ' + localStorage.getItem("pptoken");
const requestHeaders = {
  'Authorization': auth,
  'Content-Type': 'application/json'
}
var data = JSON.stringify({
  uid: params.uid,
  Type: params.type
});
return this.http.post('https://' +
params.apiBaseUrl + '/Tracker/api/Track/Consented/', data, { 'headers': requestHeaders });

}

所以一切都很好。

但是,每次調用 Tracker() 之前,我都需要獲取一個新令牌。 如何調用 GetNewToken() 並等待它完成,然后使用新令牌執行 Tracker()? 每次我這樣做時,我都會得到一個 error.map() does not support void - 我理解這是因為我首先嘗試獲取令牌,然后從 Tracker() 返回值,這顯然不是正確的方法- 但我不知道如何在 Observable Tracker() 調用 function 時首先獲取令牌...

非常感謝任何幫助。

對我來說,它看起來不像 RxJS 7 ,因為您沒有使用pipe來鏈接運營商。 無論如何,對於 map 可觀察對象,您需要使用switchMap ,如下所示:

getTracker(params): Observable<any> {
  return getNewToken().pipe(switchMap(token => {
    // fill headers and data
    return this.http.post(url, data, { 'headers': requestHeaders });
  }));
}

或者沒有 pipe,如果您使用的是舊版本的 RxJS:

getTracker(params): Observable<any> {
  return getNewToken().switchMap(token => {
    // fill headers and data
    return this.http.post(url, data, { 'headers': requestHeaders });
  });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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