RXJS observable未在flatMap上完成(Observable :: from)

时间:2017-04-27 15:12:02

标签: javascript mongodb rxjs rxjs5

我尝试做的是使用流从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,则会被触发。因此,内在的观察正在完成,但外在并没有。

1 个答案:

答案 0 :(得分:0)

您可以在订阅之前添加take(1)