![](/img/trans.png)
[英]angular rxjs mergeMap/flatMap instead of multiple pipe/subscribe
[英]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.