rxjs 怎么做到不管何时获取数据都能获取到最后一次的数据
使用场景是这样的:
我有N个模块都要获取用户信息,当第一个模块去调用时就去调用后台接口,后面的不过就直接用这个数据
这N个模块不分先后,有的模块可能调用时获取用户信息已经调用完成,即直接获取最后一次发布的数据即可
求帮助,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
或许
BehaviorSubject
可以帮到你,参考 30 天精通 RxJS(23): Subject, BehaviorSubject, ReplaySubject, AsyncSubject问题没有补充前置条件,比如:rxjs的版本
另外,这个问题不需要用rxjs来解决,可以参考以下思路:
1.定义一个变量,let promiseStatus = false;
2.所有模块发起请求之前,先判断promiseStatus是否为false,如果是再发起请求
3.当其中任意一个模块发起请求的时候,将 promiseStatus = true;
4.请求完成之后,将promiseStatus = false 重置为 false
如果一定要使用rxjs来解决,可以使用操作符 last(以下代码的rxjs版本为6.x)
看意思,你可能是想用RXJS来做缓存。标题的最后不太恰当,换成最近可能做更好些。
如果是想规避冗余的请求,建议使用share操作符,以获取当前登录用户为例:
在使用
share
操作符时要注意两点:总结:一般用它来规避冗余的请求。比如100个请求向同一个api发起,那么使用share则能够保证只请求1次。
如果想让使缓存的时间更长一些(手动清空),则可以使用
BaviorSubject
,代码大概长这样:结合使用share、BehaviorSubject,可以达到:即不发起冗余的请求,又缓存了相关的数据的作用。
而至于
last
操作符,应该是指:在数据源执行complete()
方法时,转发数据源中最后发送的数据。但如果数据源并未执行commplete
方法,则订阅者将得不到数据。应该与你的需求并不相符。最后上述代码未实测,水平有限可能有错误。
希望能够帮到你。