gpt4 book ai didi

javascript - RxJS Observable.fromEvent 链为每个订阅者触发

转载 作者:行者123 更新时间:2023-12-03 04:47:13 26 4
gpt4 key购买 nike

我为键盘驱动的界面创建了一个关键服务,我发现它似乎为每个订阅者执行完整的链:

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 执行了三次,因为有三个订阅者。这不一定是问题,但随着更多组件订阅它,效率似乎会变得相当低下。

有没有办法让每个事件只执行一次该链,然后将这些结果推送给所有订阅者,然后执行他们想要的操作?

谢谢

最佳答案

是的,您可以使用 share作为你的最后一个运算符(operator):

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))
.share();

这实际上将在所有订阅者之间共享流。

注意:sharepublish().refCount() 的别名 - 有关详细信息,请参阅文档:publish

关于javascript - RxJS Observable.fromEvent 链为每个订阅者触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42818270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com