这真的是从事件回调中获取 Rx.Observable 的最佳方式吗?
Is this really the best way to get a Rx.Observable from an event callback?
我想从数据映射库中获取事件流,但由于该库并没有真正考虑响应式编程,因此很难将任何发出的事件从它映射到可观察量。到目前为止,我最好的尝试是这个,但它感觉不是那么习惯。这是我能做的最好的事情,还是我可能缺少一些基本的 RxJs 结构,可以使其更好/更简单/更具可读性?
import Rx from 'rx';
import {EventEmitter} from 'events';
import Datamap from 'datamaps';
const eventEmitter = new EventEmitter();
const mapEvents$ = Rx.Observable.fromEvent(
eventEmitter,
'mapEvent'
)
const map = new Datamap({
element: document.getElementById('map'),
done: (datamap) => {
datamap.svg
.selectAll('.datamaps-subunit')
.on('mouseover', (o) => {
eventEmitter.emit('mapEvent', o);
});
}
});
看起来您正在使用事件发射器作为事件总线,但我们已经有您可以使用的主题。主体既是观察者又是可观察量,这意味着您可以对它们调用onNext
以给他们下一个事件,并且可以在可观察序列上使用运算符。
简单地说,我会把它重写成这样:
import Rx from 'rx';
import Datamap from 'datamaps';
const datamapsSubject = new Rx.Subject();
const map = new Datamap({
element: document.getElementById('map'),
done: (datamap) => {
datamap.svg
.selectAll('.datamaps-subunit')
.on('mouseover', (o) => {
datamapsSubject.onNext(o);
});
}
});
如果您需要可以在订阅时构建并在处置/取消订阅时销毁的东西,您也可以考虑 Observable.create,但看起来您现在只针对一个div 元素。
相关文章:
- Knockout observable没有观察到其中一个属性
- 如何在RxJS 5中创建Hot Observable
- 如何获取RxJS Subject或Observable的当前值
- 从Angular 2中的observable中提取数据
- RX受试者使用上一个值添加新发射
- Angular 2中Observable中获取数据后的队列/回调函数
- KnockoutJS清除函数内的Observable
- 从HTML标记中为observable赋予初始值
- angular2在不重新加载的情况下使用Observable(Http)
- 为什么当订阅两次rx 2.3中的observable时,第二次订阅没有收到任何值
- 帖子的 RX JS 聚合
- Rx-subscribe方法如何在不传递上下文的情况下保留上下文
- 从Observable列表中创建一个Observable对象
- 订阅 Rx.Observable from 字符串不处理值赋值
- Rx.Observable.interval,每个事件具有不同的间隔
- 这真的是从事件回调中获取 Rx.Observable 的最佳方式吗?
- RxJS中的Rx.Observable.ForkJoin和并行异步(使用X射线)
- 为rx.js observable缓冲多个订阅者
- 提前退出Rx.Observable.retryWhen/timer
- Rx.Observable.groupBy会清理空流吗?