ich einen Schlüssel-Service für eine Tastatur gesteuerte Schnittstelle gemacht habe, und ich habe festgestellt, dass es die gesamte Kette für jeden Teilnehmer auszuführen scheint:RxJS Observable.fromEvent Kette für jeden Teilnehmer Brennen
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));
Die console.log
in der ersten .do()
führt dreimal, weil es drei Abonnenten gibt. Dies ist nicht unbedingt ein Problem, aber es scheint so, als würde es ziemlich ineffizient werden, wenn mehr Komponenten es abonnieren.
Gibt es eine Möglichkeit, diese Kette nur einmal pro Ereignis auszuführen, und dann diese Ergebnisse an alle Abonnenten zu senden, um dann zu tun, was immer sie wollen?
Dank
können Sie [veröffentlichen] (http://reactivex.io/documentation/operators/publish.html) es. Beachten Sie jedoch, dass Sie auch [Verbinden] (http://reactivex.io/documentation/operators/connect.html) oder [RefCount] (http://reactivex.io/documentation/operators/refcount.html) benötigen. –
Oder verwenden Sie ['share'] (http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-share) – olsn
Schön. * Dies ist ein Alias für .publish(). RefCount() * –