rxjs - 如何发出不紧跟在 2 后面的 1
问题描述
我有一个发出数字的可观察流,我想要另一个发出所有 1 的流,而不是紧随其后的 2(比如说 200 毫秒内),例如来自这个源流:
(每个字符为 100ms)
1...12...112...11121...
结果应该是:
..1.......1.....11...1.
我将如何使用rxjs@^6.6.7
?
解决方案
基于@martin 的回答:
当发出 1 时,
- 我们创建一个新的 observable 等待下一个元素 200ms
- 如果 200 毫秒内没有元素,我们发出 1 并关闭订阅
- 如果一个元素出现并且它是 2,我们什么都不发出并关闭订阅
- 如果一个元素出现并且它是 1,我们发出原始值并关闭订阅
https://stackblitz.com/edit/rxjs-ihyznt?devtoolsheight=66&file=index.ts
source
.pipe(
filter(value => value != 2),
mergeMap(value =>
source.pipe(
first(),
filter(v => v != 2),
map(_ => value),
timeout(200),
catchError(_ => of(value))
)
)
)
.subscribe(value => console.log(value));
推荐阅读
- python - pyinstaller - 从 dist 转换为 .exe 时缺少库
- shell - 使用 awk 添加常量值
- php - 没有 api 密钥和 csrf 令牌的 Laravel 路由 api
- node.js - 在 ubuntu 14.04 上执行以下 dockerode npm 代码后出现错误“connect EACCES /var/run/docker.sock”
- fullcalendar - Fullcalendar - 年视图,月份标题禁用链接
- javascript - 如何创建动态列名推送存储在动态变量中的数据
- angular - 如何在 Angular 6 UI 测试中检查组件是否已显示 (*ngIf)
- ios - 是否建议从本机 iOS 应用程序中的设置更改应用程序语言?
- angular - 在 Edge 浏览器上获取 PDF bypassSecurityTrustResourceUrl 的访问被拒绝
- mysql - 将存储为行的名称值对转换为列