选择正确的RxJS构造以确保一个订阅在另一个订阅之前完成
我面临着一个问题 我的应用程序目前的设计如下:我有两个不同的客户端:选择正确的RxJS构造以确保一个订阅在另一个订阅之前完成,rxjs,observable,rxjs5,ngrx,Rxjs,Observable,Rxjs5,Ngrx,我面临着一个问题 我的应用程序目前的设计如下:我有两个不同的客户端:ClientA和ClientB,它们订阅两个不同的可观察对象:observableea和observableeb 请注意,该应用程序还变异了一个名为aVariable的变量 以下是流程: ClientA订阅observatea ClientB订阅ObservableB ObservableB订阅从aVariable读取false并完成 observableea订阅将aVariable设置为true并完成(晚于observable
ClientA
和ClientB
,它们订阅两个不同的可观察对象:observableea
和observableeb
请注意,该应用程序还变异了一个名为aVariable
的变量
以下是流程:
ClientA
订阅observatea
ClientB
订阅ObservableB
ObservableB
订阅从aVariable
读取false
并完成observableea
订阅将aVariable
设置为true
并完成(晚于observableeb
)observableea
的订阅在observableeb
之前完成,这样ClientB
就可以从aVariable
读取true
。。。或者换一种方式,以某种方式确保的订阅等待另一个订阅完成
我不确定要使用什么RxJS构造来实现我想要的(我目前使用的是普通的可观察对象)。我相信我需要的不仅仅是简单的观察
有人能帮忙吗
请注意,aVariable
存放在ngrx商店中,但我认为这与此问题无关
p.p.S.以上是我真实应用程序的简化。我认为你可以通过一个中间主题来解决你的问题,在这个主题中,当streamB被订阅时,你会发出一个值:
const completeStreamA=new Rx.Subject();
const streamA=Rx.Observable.never()
.takeUntil(completeStreamA);
const streamB=Rx.Observable.of('aValueOnStreamB'))
.do(()=>completeStreamA.next('completeStreamA');
//clientA立即订阅
订阅(
next=>console.log('a->next->'+next),
err=>console.log('a->error->'+err.message),
()=>console.log('a->complete')
);
设置超时(()=>{
//模拟clientB稍后的订阅
订阅(
next=>console.log('b->next->'+next),
err=>console.log('b->error->'+err.message),
()=>console.log('b->complete')
);
}, 3 * 1000);
通常,当您希望按顺序运行异步任务时,您会使用concat
或concatMap
。请看类似的问题和Hi Martin。唯一的问题是这些是不同的客户。因此,不可能使用concat。您能给出一个代码示例,说明您的意思是如何组合在一起吗?我不清楚:什么是客户机A
?你完成订阅是什么意思?你所说的“普通的”Observable
是什么意思。我的意思是ClientA
位于另一个ClientB
的类中。我所说的普通可观察性是指可观察性,而不是扩展可观察性的所有其他构造/类,如ConnectedObservable等()。@MarkvanStraten,谢谢。是的,的确如此。对不起,我没有收到你的答复。