Rxjs。嵌套的条件可观察项,暂停;“主要”;可观察

Rxjs。嵌套的条件可观察项,暂停;“主要”;可观察,rxjs,Rxjs,我有以下发现: const observable = new Observable(subscriber => { subscriber.next(1); subscriber.next(2); subscriber.next(3); }) 我想以这种方式订阅: observable.subscribe({ next(x) { console.log('got value ' + x); if (x == 2) { const observ

我有以下发现:

const observable = new Observable(subscriber => {
  subscriber.next(1);
  subscriber.next(2);
  subscriber.next(3);
})
我想以这种方式订阅:

observable.subscribe({
  next(x) { 
    console.log('got value ' + x); 
    if (x == 2) {
      const observable2 = new Observable(subscriber => {
       subscriber.next('a');
       subscriber.next('b');
       subscriber.next('c');
      })  
     observable2.subscribe(...)   
    }      
  },
  error(err) { console.error('something wrong occurred: ' + err); },
  complete() { console.log('done'); }
});
我可以观察到哪些数据会“抛出”,如果数据等于某个特定值,我需要

  • 暂停主要观察

  • 订阅if块中的可观测数据

  • 从“有条件的”可观测数据中获取一些数据

  • 恢复主要观测值


  • 在我看来,以这种方式处理可观察对象将使代码难以长期维护。如果您要订阅多个观察对象,您还必须处理它们的订阅等

    因此,对于这个特定的案例,我将如何解决它:

    const source=of(1,2,3);
    常量订阅=源
    .烟斗(
    /**
    *“暂停”是主要的可观察到的
    *在完成此内部订阅之前,无法获取下一个发出的值
    */
    concatMap(v=>{
    //if块
    如果(v==2){
    //从条件中获取一些数据
    报税表(“a”、“b”、“c”);
    }
    返回(“默认值”);
    }),
    )
    .subscribe(v=>console.log('value received!',v))
    
    concatMap
    是其中一种

    它还将返回一个observable,其订阅将由
    concatMap
    在内部处理

    阅读第一条评论后编辑
    const microS1$=。。。;
    微秒1$
    .烟斗(
    //在此处插入您的情况
    过滤器(内容=>typeof内容===“字符串”)
    )
    .订阅(d=>{
    //将数据发送到第二个微服务
    microservicetw.sendData(d);
    })
    
    是的,建议不错,但问题是我没有预定义的值(1,2,3或“a”、“b”、“c”)。observable和observable 2是来自另一个微服务的流式数据。如果从observable接收到的数据是内容(字符串),我们将该数据传递给另一个微服务(observable 2),该微服务将传输另一个数据谢谢。实际上这里不需要过滤器,情况是:若来自第一个观察者的数据不是字符串,我们只需将其保存到局部变量(让文档)。如果数据是字符串-我们将此数据发送给第二个microservice,后者返回另一个数据(data2)。最后,我们将数据2添加到变量document中,并且再次-如果数据不是string-let document=data,如果数据是string-等待来自第二个微服务的响应并将其附加到文档中。。。