RxJS 怎么合并流返回的数据?

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

例如

'use strict';

const Rx = require('rx');

const x = Rx.Observable
            .just('x')
            .flatMap((data) => {
                const subject = new Rx.Subject();
                setTimeout(() => {
                    subject.onNext([data]);
                }, 1000)
                return subject;
            })

const y = Rx.Observable
            .just('y')
            .flatMap((data) => {
                const subject = new Rx.Subject();
                setTimeout(() => {
                    subject.onNext([data]);
                }, 3000)
                return subject;
            })

Rx.Observable.zip(x, y)
            // .map(([x, y]) => {
            //     return x.concat(y);
            // })
            .subscribe((data) => {
                console.log(data);
            }, (err) => {
                console.log(err);
            });

除了用 map 重构返回的数据结构之外,还有什么更加好的办法合并呢?

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

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

发布评论

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

评论(2

臻嫒无言 2022-09-11 07:50:23

楼上的答案之所以不行,是因为 forkJoin串行 地结合每个 Observable 的最后一个 emit 的值。

既然要串行,意思就是 a 结束了才到 bb 结束了才到 c

而题目中定义的 xy 都没有明确地定义其 complete ,所以 forkJoin 不知道 x 什么时候结束,从而无法进行下去。

所以,想要楼上的答案可行的话,明确地给每个 subject 加上其 complete 方法:

subject.onNext([data])
subject.complete()

然而:

  • xy 为什么要用 subject 而不用 Observable ?

  • 为什么要把 xy 的值放在一个数组里面,目的是什么?

空心空情空意 2022-09-11 07:50:23
Rx.Observable.forkJoin(x, y)
    .subscribe(data => {
        console.log(data);
    }, err => {
        console.log(err);
    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文