2016-08-17 77 views
3

我想将Observable的内容复制到Observer中。从Observable复制到观察者

有没有一种简洁的方式来实现这一点,而不诉诸于subscribe()并手动将事件从Observable泵送到Observer?即

var observer = new Subject(); 
    var observable = new Subject(); 

    observable.subscribe(i => observer.next(i), e => observer.error(e),() => observer.complete()) 

注意:上面的代码示例在TypeScript中。

回答

2

我没有看到这样做的一点。你打算将多个观察者合并成一个吗?有一个这样的运营商:Observable.merge

如果您不能使用合并,这样做的最简单的办法是使用right version of subscribe

var observer = new Subject(); 
var observable = new Subject(); 

observable.subscribe(observer); 

编辑

假设你的初始化代码看起来像下面这样:

function initStream() { 
    var subject = new Subject(); 
    loadConfigurationCallback(config => { 
    const observable = createStreamBasedOnConfig(config); 
    observable.subscribe(subject); 
    }); 
    return subject; 
} 

在这种情况下,如果您使loadConfiguration本身返回,您可以简化更多一个observable:

function initStream() { 
    return loadConfigurationObservable().flatMap(createStreamBasedOnConfig); 
} 
+0

我有一个方法,我需要立即返回一个Observable <>,但我不能开始填充它,直到发生一些其他的异步操作(加载配置等)。 – jwa

+0

@jwa我明白了,所以你遇到了rx的困难部分。另一个解决方案是最初创建这些异步操作结果的可观察结果,并从中平面化新得到的可观察结果。 –

+0

如果我正确理解你的建议,这意味着我会在最终的Observable中获得异步操作的结果吗?因此,我不得不添加一个过滤器,因为我不希望那些在我的最终Observable流? – jwa