RxJS 如何根据上一步返回值分流呢?

aplayer
  • 435

例如:

const x = Rx.Observable.create((observer) => {
    console.log('in x');
    observer.onNext('x');
})

const y = Rx.Observable.create((observer) => {
    console.log('in y');
    observer.onNext('y');
})

const source = Rx.Observable
                .range(1, 2)
                .flatMap((item) => {
                    if(item === 1){
                        return x;
                    }else{
                        return y;
                    }
                })
                .flatMap(y)

const subscription = source.subscribe(
    (data) => {
        console.log('Next: ' + data);
    }
);

从 1 到 2 ,希望等于 1 的执行顺序是 x -> y , 而等于 2 的时候只执行 y
这样需要怎么修改呢?

回复
阅读 3.4k
1 个回答
const source = Rx.Observable
  .range(1, 2)
  .flatMap((item) => {
    if(item === 1){
       return x;
     } else {
       return Rx.Observable.empty()  // changed
      }
   })
   .merge(y) // changed

merge 不一定能保证 yx 后面,如果他们是异步的话

如果一定要保证 xy 的顺序,可以使用 concat
但前提是 xy 要明确地定义什么时候结束,所以需要调用 complete 方法:

const x = Rx.Observable.create((observer) => {
    console.log('in x');
    observer.onNext('x');
    observer.complete(); // add
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏