gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:52:56 30 4
gpt4 key购买 nike

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

我创建共享的可观察对象如下

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;
}));

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

最佳答案

随着 RxJS 5.5 的新 管道 引入了运算符语法。在 RxJS 6.0 中它变成了 强制性 使用旧语法。
所以你将不得不替换你的代码

.pipe(
mergeMap(...)
)

关于angular - 如何在 rxjs 6.4.0 Angular 中替换 flatMap 和 mergeMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54714730/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com