例如
'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 重构返回的数据结构之外,还有什么更加好的办法合并呢?
楼上的答案之所以不行,是因为
forkJoin
是 串行 地结合每个 Observable 的最后一个 emit 的值。既然要串行,意思就是
a
结束了才到b
,b
结束了才到c
。而题目中定义的
x
和y
都没有明确地定义其complete
,所以forkJoin
不知道x
什么时候结束,从而无法进行下去。所以,想要楼上的答案可行的话,明确地给每个 subject 加上其
complete
方法:然而:
x
和y
为什么要用 subject 而不用 Observable ?为什么要把
x
和y
的值放在一个数组里面,目的是什么?