2017-02-16 100 views
0

我有两个流,看起来如下:继续流之后订阅

const source1 = Rx.Observable.of([1,2,3,4,5]) 
    .map(() => "I am source 1") 
    .do((x) => console.log(x)); 
const sub1 = source1.subscribe((v) => console.log("Subscribe 2")); 

const source2 = Rx.Observable.fromEvent(document, 'click') 
    .do(() => console.log("execute!")) 
    .switchMapTo(source1) 
    .do(() => console.log("After switch map.")) 
    .map((x) => "source2"); 

source2.subscribe((x) => console.log(x)); 

没有点击文件我有以下的输出:

"I am source 1" 
"Subscribe 2" 

而且点击的输出是:

"execute!" 
"I am source 1" 
"After switch map." 
"source2" 

如何强制流source1通过进一步点击和继续流source2

我经过以下几个输出点击期望:

"I am source 1" 
"Subscribe 2" 
"execute!" 
"I am source 1" 
"After switch map." 
"source2" 

回答

1

观测量可以被认为是功能。订阅就像调用函数一样。

const o = Rx.Observable.of(1); 
o.subscribe(x => console.log(x)); 

是非常相似的

const f =() => 1; 
console.log (f()); 

就像调用一个函数不修改功能。订阅Observable不会修改观察值。订阅不是附加任何方式的Observable。它是持有任何状态的退回订阅。


两个呼叫在你的榜样订阅是完全独立的,是与此相同:

const source1 = Rx.Observable.of([1,2,3,4,5]) 
    .map(() => "I am source 1") 
    .do((x) => console.log(x)); 
const sub1 = source1.subscribe((v) => console.log("Subscribe 2")); 

const source1_v2 = Rx.Observable.of([1,2,3,4,5]) 
    .map(() => "I am the same as source 1") 
    .do((x) => console.log(x)); 

const source2 = Rx.Observable.fromEvent(document, 'click') 
    .do(() => console.log("execute!")) 
    .switchMapTo(source1_v2) 
    .do(() => console.log("After switch map.")) 
    .map((x) => "source2"); 

source2.subscribe((x) => console.log(x));