2016-08-17 46 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