0
我做了一個重要的服務爲鍵盤式界面,我發現,它似乎執行每個用戶的完整鏈條:RxJS Observable.fromEvent鏈射擊爲每個用戶
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
執行三次,因爲有三個訂戶。這不一定是個問題,但是隨着更多組件訂閱它,這樣看起來效率會很低。
有沒有一種方法可以只對每個事件執行一次鏈,然後將這些結果推送給所有訂閱者,然後執行他們想要的任何操作?
感謝
您可以[發佈](http://reactivex.io/documentation/operators/publish.html)它。但請注意,您還需要[連接](http://reactivex.io/documentation/operators/connect.html)或[RefCount](http://reactivex.io/documentation/operators/refcount.html)。 –
或者使用['share'](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-share) – olsn
不錯。 *這是.publish()的別名。refCount()* –