我试图在Angular应用程序中实现用户权限,但简单地说,这是一个场景:
加载MainModule
后,我发出HTTP请求并将数据存储在localStorage
中,以便下次可以从那里检索数据.这个逻辑在Observable
中,我从几个地方订阅了它.
问题是,如果同时执行两个订阅,甚至在我有机会将数据存储到localStorage之前,都会发出两个HTTP请求.
就是这样,但要进一步解释...
我只想发出一次HTTP请求,将数据存储在localStorage中并发出值,从第二个订阅者开始,如果可能的话,忽略所有这些逻辑,只返回最后发出的值.
我try 使用BehaviorSubject
,但当我重新进入模块时,我得到了最后发出的数据(即user_A次注销,user_B次登录).我使用的服务是在root
中提供的,我无法在MainModule
中提供,因为我在那里的一些警卫中遇到DI错误.我也读过share
操作符,但我不确定如何使用它.
share
的问题是管道化的observable没有完成,所以我打包了this.http.get<T>
的订阅,在observable中调用.next(value)
和.complete()
,现在它开始工作了.在发出HTTP请求之前,我还添加了localStorage的条件.
此外,在每个模块重新输入时,我仍然得到最后发出的值,因此我将函数getSomeData()
转换为一个属性,以始终获得可观察对象的相同实例.