我有两个数据流,第二个依赖于第一个,但我希望能够捕获第二个数据。我写了两个用于创建observable的函数。我想知道这个实现是否正确。
b
答案 0 :(得分:0)
如果您可以更具体地了解您的要求,那将会有所帮助,但据我所知,它看起来很好。
我认为您可能希望使用switchMap而不是flatMap。 FlatMap将维护多个内部订阅,而SwitchMap仅维护对最新内部可观察的订阅。因此,如果您只想根据源的输出从内部observable获取值,那么switchMap将会这样做。
不确定您的用例,但您可能需要考虑应用过滤器而不是返回Observable.empty()。
以下是一个例子:
const firstObservable = Rx.Observable.create((o) => {
o.next();
setTimeout(() => o.next(1), 1000);
setTimeout(() => o.next(), 2000);
setTimeout(() => o.next(2), 3000);
setTimeout(() => o.complete(), 4000);
}).do(console.log.bind(null, 'first: next'),
console.log.bind(null, 'first: error'),
console.log.bind(null, 'first: complete'));
const secondObservable = (x) => Rx.Observable.interval(x * 500).take(5)
.do(console.log.bind(null, 'second: next'),
console.log.bind(null, 'second: error'),
console.log.bind(null, 'second: complete'));
firstObservable.filter(x => x).switchMap(x => secondObservable(x))
.subscribe(console.log.bind(null, 'stream: next'),
console.log.bind(null, 'stream: error'),
console.log.bind(null, 'stream: complete'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.js"></script>