【发布时间】:2017-03-15 18:47:55
【问题描述】:
我为键盘驱动的界面做了一个关键服务,我发现它似乎为每个订阅者执行了完整的链:
this.documentKeyEvent = Observable.fromEvent(document, 'keydown')
.do((e: KeyboardEvent) => console.log(e.keyCode || e.which))
.filter((e: KeyboardEvent) => !isKeyModified(e) && !!Keys[remap(e.keyCode || e.which)])
.do((e: KeyboardEvent) => e.preventDefault())
.throttle(() => Observable.timer(100))
.map((e: KeyboardEvent) => remap(e.keyCode || e.which));
第一个.do() 中的console.log 执行了三次,因为有三个订阅者。这不一定是个问题,但随着越来越多的组件订阅它,这似乎会变得非常低效。
有没有办法在每个事件中只执行一次该链,然后将这些结果推送给所有订阅者,然后做他们想做的任何事情?
谢谢
【问题讨论】:
标签: javascript events rxjs observable