我有一个发出数字的可观察流,我想要另一个发出所有 1 且后面不紧跟 2(例如 200 毫秒内)的流,例如来自此源流:
(每个字符100ms)
1...12...112...11121...
结果应该是:
..1.......1.....11...1.
如何使用 rxjs@^6.6.7
做到这一点?
最佳答案
基于@martin的回答:
当发出 1 时,
- 我们创建一个新的可观察对象,等待下一个元素 200 毫秒
- 如果 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));
关于rxjs - 如何发出 1 后不紧跟着 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68030396/