我的应用程序中的用户可以拥有汽车列表,并可以将一辆汽车激活。登录进程后,我向服务器发出请求并获得活动汽车。此外,当用户已登录(令牌尚未过期)并打开应用程序(或通过F5刷新页面)时,我还从服务器加载活动汽车。问题是我有很多需要使用print(B.Col1.values.__mul__)
<method-wrapper '__mul__' of numpy.ndarray object at 0x1154d9620>
的地方。第一个明显的解决方案是使用currentCar
。所以,在我的服务中,我有:
BehaviorSubject
然后,在构造函数中,我获取数据并将值赋给public currentCar$: BehaviorSubject<Car> = new BehaviorSubject(null);
。
然后,在某些组件中我使用它:
currentCar$
我在我的组件中经常使用这段代码,我总是要检查是否定义了汽车(请求已经完成)(默认空值)。
所以,我想等到请求完成,对于这种情况,我可以使用 this.carService.currentCar$
.subscribe(car=> {
if(car) {//do what we need}
}
。它工作正常,但是,正如我所说,用户有UI可以更改当前的汽车。更改后,我需要为AsyncSubject
分配新值,但currentCar$
不执行任何操作,因为next
必须在请求完成后完成。所以,我需要AsynSubject
和AsyncSubject
的某种组合。是否有一些运营商或其他方式?
PS。我不能使用本地存储,数据总是必须从服务器加载。
答案 0 :(得分:1)
您似乎可以使用与ReplaySubject(1)
链接的take(1)
代替。
在你的情况下,它的工作方式与BehaviorSubject
相同,但所有观察者都会等到它发出至少一个项目。如果您稍后订阅了最新值将由ReplaySubject
缓存。
public currentCar$ = new ReplaySubject<Car>(1);
然后,当您想要访问汽车时,您将始终致电:
this.carService.currentCar$.take(1)
.subscribe(car=> {
...
})