简体   繁体   English

RXJS可观察到的未在flatMap上完成(Observable :: from)

[英]RXJS observable not completing on flatMap(Observable::from)

What I'm trying to do is pull some data from mongodb using streams, do some operations on data, use keys of incoming data to do another query in mongo and then join the data. 我想做的是使用流从mongodb中提取一些数据,对数据进行一些操作,使用传入数据的键在mongo中进行另一个查询,然后将数据联接。

The actual code is much more complex but i will illustrate with simpler example. 实际的代码要复杂得多,但我将用更简单的示例进行说明。

The problem I have is that on complete never gets fired and I'm assuming because the outer observable never completes. 我的问题是,完成时永远不会被解雇,我想这是因为外部的可观察对象永远不会完成。

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
    );

How can i get the complete to fire? 我怎样才能得到完整的射击? Or is there a better way to do what I'm trying to achieve? 还是有更好的方法来完成我要达到的目标?

If I chain .finally(() => console.log(done) on Observable.from inside nested flatMap , that gets fired. So inner observable is completing but outer doesn't. 如果我从嵌套的flatMap内部将Observable.from .finally(() => console.log(done)链接.finally(() => console.log(done)被触发,因此内部observable可以完成,但是外部没有。

您可以在订阅前简单地添加take(1)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM