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

发布于 2022-09-04 07:50:05 字数 733 浏览 11 评论 0

例如:

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
这样需要怎么修改呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心意如水 2022-09-11 07:50:05
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
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文