交换机映射会自动调用订阅吗?

  • 本文关键字:调用 映射 交换机 rxjs
  • 更新时间 :
  • 英文 :


>我正在尝试获得一种行为,即如果当前可观察量的值发生变化,则应分别调用链接的相应可观察量。

以下代码按预期工作,但我只需要对此行为进行一些调整,我正在尝试在生产站点上实现它。

我知道 switchMap 取消订阅当前订阅并重新订阅返回的新订阅。 但是,它是否也调用新的可观察量订阅来启动并运行它拥有的代码,或者这是由管道操作员运行的还是我错过了任何关键概念?

有人可以好心地澄清一下。 谢谢。

这是堆栈闪电战代码链接 ::: https://stackblitz.com/edit/rxjs-ktnf9x :: 和概述

let a = new BehaviorSubject(null);
let b = new BehaviorSubject(null);
let c = new BehaviorSubject(null);
let d = new BehaviorSubject(null);
let a$ = a.asObservable();
let b$ = b.asObservable();
let c$ = c.asObservable();
let d$ = d.asObservable();

d$
.pipe(
switchMap(
data => {
console.log("from d :: " + data);
return c$;
}
)
)
.pipe(
switchMap(
data => {
console.log("from c :: " + data);
return b$;
}
)
)
.pipe(
switchMap(
data => {
console.log("from b :: " + data);
return a$;
}
)
)
.subscribe(
data => {
console.log("from a :: " + data);
console.log(""); // for next line.
}
)

b.next("calls");
a.next("allSubs");
c.next("it");
d.next("does");
d.next('yes');

最后 --> 输出 ::: 是的,它调用 allSubs

为了更容易解释。SwitchMap 取消订阅 c$ 当 d$ 发出时。如果 D 发射一次并且 C 不断发射,您将获得 D-C-C-C 序列 如果 d 在中间再次发出,你会得到 D-C-C-C-D-C-C-C

d$
.pipe(
switchMap(
data => {
console.log("from d :: " + data);
return c$;
}
)
)

最新更新