Rxjs 订阅后继续流

Rxjs 订阅后继续流,rxjs,rxjs5,Rxjs,Rxjs5,我有两条流,如下所示: 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, 'clic

我有两条流,如下所示:

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"
"I am source 1"
"Subscribe 2"
"execute!"
"I am source 1"
"After switch map."
"source2"
进一步单击,输出为:

"execute!"
"I am source 1"
"After switch map."
"source2"
如何通过进一步单击并在继续使用流
source2
后强制流
source1
订阅

单击几下后,我期待以下输出:

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

可观测值可以看作函数。订阅就像调用一个函数

i、 e

const o=Rx.Observable.of(1);
o、 订阅(x=>console.log(x));
非常类似于

const f=()=>1;
console.log(f());
就像调用函数不会修改函数一样。订阅可观察对象不会修改可观察对象。订阅没有以任何方式附加到可观察对象。它是持有任何状态的返回订阅


在您的示例中,订阅的两个调用是完全独立的,与此相同:

const source1=Rx.Observable.of([1,2,3,4,5])
.map(()=>“我是源1”)
.do((x)=>console.log(x));
constsub1=source1.subscribe((v)=>console.log(“subscribe2”);
const source1_v2=Rx.Observable.of([1,2,3,4,5])
.map(()=>“我与源1相同”)
.do((x)=>console.log(x));
const source2=Rx.Observable.fromEvent(文档“单击”)
.do(()=>console.log(“执行!”)
.switchMapTo(source1\u v2)
.do(()=>console.log(“在开关映射之后”))
.map((x)=>“源2”);
订阅((x)=>console.log(x));