我有2个流,分别来自键盘事件(K)和鼠标事件(M)。 当上一个事件为null或鼠标事件时,应产生键盘事件。 鼠标事件应在上一个事件为键盘事件时产生。
因此,调度M-K-M-K-K-M-K-K时,应调用键盘处理程序3次,鼠标处理程序2次。
以下订阅允许键盘流产生多个键盘事件,这不是我想要的。
keyboardStream(document)
.do(keyboardHandler)
.switchMap(() => mouseStream(document).take(1))
.subscribe(mouseHandler)
答案 0 :(得分:0)
我已经结束了:
const keyboard$ = fromEvent(document, 'keyup')
.pipe(
mapTo('k')
);
const mouseOnce$ = fromEvent(document, 'keyup')
.pipe(
switchMap(() => fromEvent(document, 'mousedown').pipe(first())),
mapTo('m')
);
const stream = merge(
mouseOnce$,
keyboard$
).pipe(distinctUntilChanged());