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));
})
);
我正在与 '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));
})
);