rxjs - combineLatest 不会发射任何东西,除非所有内部 observables 都发射了至少 1 次发射
问题描述
所以说我有这 3 个 observables:
const numpad1$ = fromEvent(document, 'keydown')
.pipe(
startWith(0),
filter(({ key, code }) => key === '1' && code === 'Numpad1'),
map(() => 1),
scan((a, b) => a + b, 0),
);
const numpad2$ = fromEvent(document, 'keydown')
.pipe(
startWith(0),
filter(({ key, code }) => key === '2' && code === 'Numpad2'),
map(() => 1),
scan((a, b) => a + b),
);
const numpad3$ = fromEvent(document, 'keydown')
.pipe(
startWith(0),
filter(({ key, code }) => key === '3' && code === 'Numpad3'),
map(() => 1),
scan((a, b) => a + b),
);
然后我combineLatest
这样使用:
combineLatest(numpad1$, numpad2$, numpad3$).subscribe(console.log)
在小键盘 1、2 和 3 都被按下至少一次之前,订阅不会生成控制台日志。每当任何内部 obersvables 发出时,我可以使用 rxjs 运算符来发出 observable 吗?例如,在上面的示例中,我希望在console.log
第一次按下任何 numpad 1 时调用 ,而根本没有按下 numpad 2 和 3 。所以结果应该是这样的:[1,0,0](0s,因为我正在使用startWith(0)
)。
解决方案
解决方案实际上是将 移动startWith(0)
到管道的末端。所以:
const numpad1$ = fromEvent(document, 'keydown')
.pipe(
filter(({ key, code }) => key === '1' && code === 'Numpad1'),
map(() => 1),
scan((a, b) => a + b, 0),
startWith(0),
);
推荐阅读
- html - CSS适合网格单元以按比例调整大小的img
- javascript - 原型方法中的 Object.keys(this)
- visual-studio-code - 如何 Markdown 预览并跳转到行号
- c# - 如何将泛型类型传递给静态方法
- scala - 在 Scala、Spark 中加入两个(成对的)RDD
- dns - 在 DNS Wireshark 中查找 TTL 的最大值
- reactjs - 在 React 中将函数传递给组件
- python - 分隔/拆分行值并形成单独的行
- regex - 如何在 Linux 中使用特定值 grep JSON 记录
- vba - VBA if 语句无法正常工作