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

问题描述 投票:2回答:1

我的Angular 7应用程序中有一个拦截器,它在重新发出请求之前发出获取令牌的请求。如果一次有多个请求进入,那么他们都会请求获取令牌。为了避免这种情况,我共享一个observable,以便共享获取令牌的结果,并且只有一个请求获取令牌。

我创建共享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;
            }));

当请求失败时,我无法获得“无法获取令牌”。我在那里做了更多的错误处理,所以我需要在请求失败时触发一些代码。

angular rxjs rxjs6
1个回答
1
投票

使用RxJS 5.5,引入了新的管道操作符语法。在RxJS 6.0中,必须使用旧语法。因此,您必须更换代码

.pipe(
    mergeMap(...)
)
© www.soinside.com 2019 - 2024. All rights reserved.