第一个事件触发后如何执行第二个事件

bai*_*mas 1 rxjs angular

有没有办法在第一个事件触发后执行第二个事件?

在下面的示例中,我想在调用 touchmove 事件后使用滚动事件。

fromEvent(window, 'touchmove').pipe(
  tap(() => this.scroll$.next(false),
    debounceTime(100)
).subscribe(() => {
  this.scroll$.next(true);
})

Run Code Online (Sandbox Code Playgroud)

Jon*_*wag 5

如果您scroll$ Observable可以依赖其他可观察量并且不必是 a,Subject则可以让它直接依赖于fromEvent Observable.

private sroll$ = fromEvent$(window, 'touchmove').pipe(
  switchMapTo(
    merge(
      of(false),
      timer(100).pipe(mapTo(true))
    )
  )
)
Run Code Online (Sandbox Code Playgroud)

Observablescroll$由 Observable 触发fromEvent$(window, 'touchmove')。然后我们switchMapTo使用组合运算符merge

  • 这样我们就可以false通过创建仅包含该值的 Observable 来立即返回该值 ( of(false))。
  • 此外,我们可以启动一个在 100 毫秒后timer触发的事件。true