簡體   English   中英

如何在 rxjs 6.4.0 Angular 中替換 flatMap 和 mergeMap

[英]How to replace flatMap and mergeMap in rxjs 6.4.0 Angular

我的 Angular 7 應用程序中有一個攔截器,它在重新發出請求之前請求獲取令牌。 如果同時收到多個請求,那么它們都會發出請求以獲取令牌。 為了避免這種情況,我共享了一個 observable,以便共享獲取令牌的結果,並且只發出一個請求來獲取令牌。

我創建共享的可觀察對象如下

this.authService.sharedToken =   this.authService.getToken().pipe(share());

然后我提出請求

 return auth.sharedToken.flatMap((res) => {

     auth.saveTokenToLocalStorage(res);
     return this.getRequestWithAuthentication(request, next, auth);

 }).catch(function (err) {// I handle errors here
 }

問題是 flatMap 已被棄用,用 mergeMap 替換它也不起作用。 現在似乎 mergeMap 是一個獨立的函數。 那么我怎樣才能讓上面的代碼工作。

我正在使用 rxjs 6.4.0 和 Angular 7.2.4

謝謝。

編輯:

使用新的管道方法我有以下幾點:

  return auth.sharedToken.pipe(
            mergeMap((res) => {

                auth.saveTokenToLocalStorage(res);
                return this.getRequestWithAuthentication(request, next, auth);
            }), catchError(function (err) {
                console.log("failed to get token")
                return EMPTY;
            }));

當請求失敗時,我無法打印“無法獲取令牌”。 我在那里做了更多的錯誤處理,所以我需要在請求失敗時觸發一些代碼。

RxJS 5.5引入了新的管道運算符語法。 RxJS 6.0 中必須使用舊語法。 所以你將不得不替換你的代碼

.pipe(
    mergeMap(...)
)

暫無
暫無

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

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