我有来自汽车拍卖的数据流。每个汽车拍卖都有n个车道。我想记录每辆车的拍卖。
流看起来像这样......
- {lane:1,action:bid} --- {lane:2,action:start} --- {lane:1,action:bid} --- {lane:2,action:bid} --- {lane:1,action:sold} ---
我有以下内容来缓冲每个拍卖行并关闭待售的缓冲区......
const bufferOpen$= auctionWebSocketStream$
.filter(stream => stream.tag === 'CURITEM');
const bufferClose$ = () => auctionWebSocketStream$.filter(stream => stream.tag === 'SOLD');
auctionWebSocketStream$
.bufferToggle(bufferOpen$, bufferClose$)
.subscribe(x => console.log(x));
只要有一个拍卖和一个车道,上述工作就可以了。有多个车道,有关于多个车道的出价/销售信息。
如何通过通道将流聚合到缓冲区?类似的解决方案总是已知聚合参数。但是我需要随时分流,这是一条新车道。
非常感谢帮助。
我制作了一个JSBin来炫耀我的沮丧和无知。它给出了一个示例输入流并解释了所需的输出。
http://jsbin.com/tuxitev/edit?js,console
(对于奖励积分,它只显示Babel下的空数组。不确定为什么需要Typescript)
答案 0 :(得分:0)
如果有人知道RxJS问题的答案在哪里,请告诉我。我接受了答案。这是我第三次未回答的RxJS问题。
对于任何对答案充满好奇的人来说,就是这样。
stream$
.groupBy(stream => stream.lane)
.mergeMap(stream =>
stream.scan((acc, cur) => {
if (cur.action === 'start') {
acc = [];
}
acc.push(cur)
return acc;
}, [])
.filter(stream => stream[stream.length-1].action === 'sold')
)
.subscribe(
x => console.log(x),
(e) => console.error(e),
() => console.log('complete')
)