好吧,这应该很容易解决,但是由于该应用程序以前的设计方式,因此要复杂一些。我发现的大多数答案都无法解决我要解决的问题。
从本质上讲,我拦截了API调用,当存在401时,我想获取一个新令牌。此应用程序的设计方式是,我可以调用一个异步操作,以启动API调用来获取新令牌。然后,将该令牌保存在localStorage中。商店中有一个标记,用于跟踪此过程的进度。因此,现在我必须听听可观察对象,并在观察完成后从localStorage中获取新令牌,然后再次进行呼叫。
类似这样的东西:
this.initRefreshFlag$.subscribe((val, i) => {
if (val === InitFlagType.Done) {
const newRequest = request.clone({
setHeaders: {
'Authorization':
`${localStorage.getItem(TOKEN_TYPE)} ${localStorage.getItem(ACCESS_TOKEN_KEY)}`
}
});
return next.handle(newRequest);
}
});
但是,next.handle()
不会触发。我现在了解到,由于可能发生内存泄漏,因此我不想在这里使用订阅。我尝试使用switchMap
和mergeMap
,但是当可观察到的this.initRefreshFlag$
更改时,它们不会触发。
在不重构动作/史诗中的一堆东西的情况下,我迷失了前进的最佳方法。有什么建议吗?
答案 0 :(得分:1)
我很困惑Array{Int64,1}[[1], [2]]
或switchMap
无法解决的问题,但实际上您无法从mergeMap
返回任何信息。
通常,如果您想执行一个Observable,然后将其值用于其他Observable的继续,则可以使用subscribe()
:
mergeMap