fee*_*lay 4 javascript rxjs reactive
我想检测何时mousedown被解雇超过 500 毫秒,如果是这样 - 做点什么。我的尝试:
const button = document.querySelector('button')
const stream = Rx.Observable.fromEvent(button, 'mousedown')
const mouseUp$ = Rx.Observable.fromEvent(button, 'mouseup')
stream.delay(500).takeUntil(mouseUp$).subscribe(() => console.log(1))
它有效,但仅在第一次运行时有效。然后,由于takeUntil运营商,流被取消。如何让它每次都有效?
TimerObservable在每个mouseDown$事件上启动500 毫秒。如果mouseUp$获取的500毫秒内发射unsubscribe的TimerObservable。
const button = document.querySelector('button')
const mouseDown$ = Rx.Observable.fromEvent(button, 'mousedown')
const mouseUp$ = Rx.Observable.fromEvent(button, 'mouseup')
const stream$ = mouseDown$.switchMap(() => Rx.Observable.TimerObservable(500).takeUntil(mouseUp$));
stream$.subscribe(() => console.log('Only Fired after 500ms'))RxJS >= 6.0.0
import { switchMap, takeUntil } from 'rxjs/operators';
import { timer, fromEvent } from 'rxjs';
const button = document.querySelector('button')
const mouseDown$ = fromEvent(button, 'mousedown')
const mouseUp$ = fromEvent(button, 'mouseup')
const stream$ = mouseDown$.pipe(
  switchMap(() => timer(500).pipe(takeUntil(mouseUp$)))
);
stream$.subscribe(() => console.log('Only Fired after 500ms'))| 归档时间: | 
 | 
| 查看次数: | 1390 次 | 
| 最近记录: |