rxjs - 根据流值选择算子
问题描述
有一个数据源发出值 0 或 1。
如果为 0,我想通过 switchMap 操作符进行管道传输。
如果 1 我想通过排气映射操作员进行管道传输。
我怎样才能做到这一点?
https://stackblitz.com/edit/rxjs-gcvsfe
const source = from([0, 0, 0, 1, 1, 1]).pipe(
// if value === 0
switchMap(value => {
return of("Operator switchMap, value: " + value);
})
// if value === 1
// exhaustMap(value => {
// return of('Operator exhaustMap, value: ' + value)
// })
);
source.subscribe(console.log);
解决方案
如果您想切换运营商,那么您可能需要 2 个不同的流。
如果是这种情况,那么您可以使用filter
运算符并拥有类似的东西
const source = from([0, 0, 0, 1, 1, 1]);
const stream_0 = source.pipe(
filter(val => val === 0),
switchMap(value => {
return of("Operator switchMap, value: " + value);
})
)
const stream_1 = source.pipe(
filter(val => val === 1),
exhaustMap(value => {
return of('Operator exhaustMap, value: ' + value)
})
);
merge(stream_0, stream_1).subscribe(console.log);
推荐阅读
- elixir - 使用 Elixir Ecto Repo 以原子方式检查和设置?
- yaml - 使用环境变量获取另一个环境变量的值
- hlsl - 对其他像素的影响
- hardware - 如何降低OV传感器的帧率
- angular - 将大型 Angular 应用程序拆分为多个可部署单元
- javascript - 使用 Fetch API + Blob API 下载文件的内存使用情况
- node.js - 运行时NodeJS + Typescript + Docker错误
- javascript - 无法从生成的列表中抓取元素
- ethereum - How to resolve "Internal error" from web3.eth.Contract.MyMethod.estiamteGas
- python - 在 ... 工作区中检测到可能包含 Python 测试的文件,但测试框架已禁用