在构建依赖于相同基础源的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->却毫无帮助。

重现

这是带有 typescript 和rxjs的stackblitz的link

最佳答案

您可以将observable1中的发射异步化,然后再将它们传递给observable2:

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

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

08-07 09:47