我尝试做的是使用流从mongodb中提取一些数据,对数据执行某些操作,使用传入数据的键在mongo中执行另一个查询,然后加入数据。
实际代码要复杂得多,但我将用更简单的例子说明。
我遇到的问题是,完全永远不会被解雇,我会假设,因为外部可观察性永远不会完成。
const o$ = RxNode.fromStream(getDataFromMongo(), 'end'))
.filter(doSomeFiltering)
.bufferCount(100)
.flatMap(bufferedData => {
let ids = _.map(bufferedData, 'id');
return RxNode.fromStream(getMoreDataFromMongodb(ids))
.reduce(createMapIdObject(), {})
.flatMap(createdMap => { //because i get here, outer never complets
return Observable.from(bufferedData)
.map(item => ({
id: item.id,
size: createdMap[item.id].size
}));
});
})
.subscribe(
c => console.log(c),
err => console.log(err),
() => console.log('COMPLETE') // never happens
);
我怎样才能完成射击?或者有更好的方法来做我想要实现的目标吗?
如果我在嵌套.finally(() => console.log(done)
内的Observable.from
上链接flatMap
,则会被触发。因此,内在的观察正在完成,但外在并没有。
答案 0 :(得分:0)
您可以在订阅之前添加take(1)
。