rxjs combineLatest 没有按预期工作

rxjs combineLatest not working as expected

我正在与 'combineLatest' 运算符作斗争... 我有一个像这样的操作员链:

    const observable = interval(1000).pipe(
  map((x) => 'myAction'),
  mergeMap((action)=>
    combineLatest([from([1,2,3]),of(action)])
  ),
  tap(result=>{
    console.log('-');
    console.log(JSON.stringify(result));
  })
);

我希望得到这样的输出:

[1, 'myAction']
[2, 'myAction']
[3, 'myAction']

我得到的只是一个输出:

[3, 'myAction']

怎样才能达到预期的效果?

顾名思义,combine latest 仅组合给定流的最新排放。由于 from([1,2,3]) 是同步的(有效地同时发出所有值),您可能会遇到一些难以预测的行为。我还没有对此进行测试,但您可以切换可观察对象的顺序,它可能会按预期工作(因为 of(action) 首先被订阅)。

我会如何解决这个案例:

因为 of(action) 只是包装一个值,所以我不会打扰。只需将值直接映射到您的可观察对象中即可。这可能看起来像这样:

const observable = interval(1000).pipe(
  map(x => 'myAction'),
  mergeMap(action => of(1,2,3).pipe(
    map(n => [n, action])
  )),
  tap(result=>{
    console.log('-');
    console.log(JSON.stringify(result));
  })
);