主题订阅未完成

时间:2018-01-19 15:12:51

标签: observable

这是我的情景。我有一个mongodb访问类。在初始化时,建立连接并将其保存在ReplaySubject中。消费者得到这个主题,并用它来进行数据库读写。在那个级别,它都按预期工作。

public getCollection(collectionname: string) {
    // console.log('getCollection mongodb', this.mongoclient$);
    return this.mongoclient$
        .map(db => db.collection(collectionname))       
}

消费者获取值,然后在可观察链中进行读写操作。消费者可以在建立连接之前调用此函数。

但是如果我在链中使用concatMap,它可以运行一次。与观察完成时的其他apis相同。

concatMap停止工作,因为主题没有完成。

那么如何以可观察链完成的方式从Subject获取值?

或许我做错了。什么是更好的方法来进行初始化以获取值,一个异步过程来获取值,消费者可以在获取值之前调用该值?

1 个答案:

答案 0 :(得分:0)

.take(1)就是答案。这只适用于需要获取一个值并在可观察链上进行操作的情况。

感谢Alex Rickabaugh在gitter上。