将流与rxjs结合(带有切换映射和获取)

时间:2018-07-03 10:03:42

标签: rxjs observable

我有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)

1 个答案:

答案 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());