rxjs - 如何发出 1 后不紧跟着 2

标签 rxjs rxjs6

我有一个发出数字的可观察流,我想要另一个发出所有 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/

相关文章:

angular - 在拦截器中刷新 token 时管道 catchError 不起作用

angular - 响应 rxjs 取消订阅

javascript - 热可观察错误处理

angular - 反跳异步验证器

angular - 我如何从 RXJS 5.5.6 模拟 fromEvent 函数?

angular - 循环数组并为 Observable 中的每个 id 返回数据

javascript - Rxjs 将 Json 文档中的数组映射到新的数组类型

angular - 如何订阅和更新深深嵌套在BehaviorSubject 中的各个属性?

angular - 使用构造函数 'Subscriber' 从对象开始将循环结构转换为 JSON

javascript - RxJS Observable :'Skip is not a function'(或任何其他函数)