我有一个基于node.js的定位服务,当用户移动时会产生事件,我想使用RxJS来处理这些事件,并寻找任意复杂的模式,例如用户进入某个区域并访问其中的2个兴趣点1小时。
首先,我需要根据唯一的用户ID(来自事件正文)拆分事件流,但我找不到任何可以执行此操作的RxJS函数。
filter()将要求事先知道所有uuids,这是不可取的。 groupBy()看起来需要在返回分组的observable之前处理整个序列,这是不可能的。
我在想,也许我需要构建一个自定义observable来维护uuids到observable的映射,并根据需要实例化新的observable。然后,这些可观察者中的每一个将需要经历相同的处理以搜索模式匹配,并且当用户的移动与模式匹配时最终触发一些动作。这里面临的一个明显挑战是,当用户进入系统并移动时,我会生成一个动态增长的可观察地图。
有什么想法可以用RxJS实现这样的事情吗?
答案 0 :(得分:0)
我认为你误解了groupBy()
的工作原理。每次生成新密钥时,它都会生成一个新的Observable
,如果该密钥已经存在,则只会将其推送到现有的Observable
。
所以对于你的问题,它看起来应该是这样的:
var source = getLocationEvents();
var disposable = new Rx.CompositeDisposable();
disposable.add(
source.groupBy(function(x) { return x.userid; })
.map(function(x) {
return x.map(function(ev) { /*Process the the event*/ });
})
.subscribe(function(group) {
disposable.add(group.subscribe(/*Do something with the event*/));
});