如何使一个可观察物取决于另一个可观察物

时间:2019-09-25 10:52:01

标签: javascript typescript rxjs

在构建依赖于相同基础源的2个可观察对象时,我在理解事件顺序时遇到问题。希望您不仅可以为我提供有效的解决方案,还可以解释为什么我在下面得到结果。我的目标是observable2永远不会在observable1之前发射。

代码

const filters$ = new Subject();

const observable1 = filters$.pipe(
  map(() => 'obersvable1')
);

const observable2 = observable1.pipe(
  map(() => 'observable2')
)

observable2.subscribe((v) => console.log(v));
observable1.subscribe((v) => console.log(v));

预期结果

observable1
observable2

实际结果

observable2
observable1

问题在于,当filters$主题发出时,observable2首先发出? ??‍♂️

我尝试在mergeMap上使用observable2运算符,使其“依赖” observable1->却毫无帮助。

复制

这是使用打字稿和rxjs进行的堆栈炸弹袭击link

1 个答案:

答案 0 :(得分:4)

您可以先将observable1的排放物传递给observable2,然后使其异步:

const observable2 = observable1.pipe(
  observeOn(asyncScheduler),
  map(() => 'observable2')
);

您的更新演示:https://stackblitz.com/edit/rxjs-xqcyqk?file=index.ts