我正在订阅一个基于其他 2 个可观察量的映射可观察量。每当两者中的任何一个发出值时,我希望映射的可观察值发出。
每当外部可观察值发出时,内部可观察值应重置为默认值(示例中为 0)。问题是,当我重置内部值时,会发出一个额外的值。
(对于上下文 - 2 个可观察量为 http 请求提供参数,这是映射的可观察量。新的外部值应将内部值重置为 0)
const outer = new Subject();
const inner = new BehaviorSubject(0);
const http = of("");
let mapped = outer.pipe(
tap(() => inner.next(0)),
switchMap(outerVal => {
return inner.pipe(map(innerVal => ({ innerVal, outerVal })));
}),
switchMap(({ innerVal, outerVal }) => {
return http.pipe(tap(() => console.log("http: ", outerVal, innerVal)));
})
);
mapped.subscribe(result => {
console.log(result);
});
outer.next("first");
inner.next(1);
inner.next(2);
outer.next("second");
inner.next(3);
// http: first 0
// http: first 1
// http: first 2
// http: first 0 <--- extra
// http: second 0
// http: second 3
我知道为什么会发生这种情况,但我不知道如何处理。我有一个解决方案,可以在该 stackblitz 的底部获得正确的结果,但我认为它会导致内存泄漏。
https://stackblitz.com/edit/rxjs-mxc5wq?file=index.ts
手掌心
BIG阳
相关分类