Я пытаюсь получить такое поведение, чтобы, если текущая наблюдаемая величина изменялась, соответствующие ссылки наблюдаемой должны вызываться соответственно.
Следующий код работает как задумано, но мне просто нужна некоторая конформация относительно этогоповедение, я пытаюсь реализовать это на производственной площадке.
Я знаю, что 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');
finally -> Outputs ::: да, он вызывает allSubs