Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择正确的RxJS构造以确保一个订阅在另一个订阅之前完成_Rxjs_Observable_Rxjs5_Ngrx - Fatal编程技术网

选择正确的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,谢谢。是的,的确如此。对不起,我没有收到你的答复。