用RxJS实现批处理队列的去抖动

用RxJS实现批处理队列的去抖动,rxjs,Rxjs,我试图了解RxJS是否适合解决此节点模块执行的问题: 它的描述是:“一个队列,当达到其大小或超时时将发出并清除其内容。非常适合于为批量API聚合数据,其中及时批处理是最好的。或者任何真正需要批处理数据的地方。” 如果是这样的话,有人能告诉我如何用RxJS实现这个npm模块中的简单示例吗?如果可能,最好使用ES5 我不可能用ES5这么做:) constdatawithnamespace=(数据,名称空间)=>({data,名称空间}); 常量源=[ dataWithNamespace('0'),

我试图了解RxJS是否适合解决此节点模块执行的问题:

它的描述是:“一个队列,当达到其大小或超时时将发出并清除其内容。非常适合于为批量API聚合数据,其中及时批处理是最好的。或者任何真正需要批处理数据的地方。”


如果是这样的话,有人能告诉我如何用RxJS实现这个npm模块中的简单示例吗?如果可能,最好使用ES5

我不可能用ES5这么做:)

constdatawithnamespace=(数据,名称空间)=>({data,名称空间});
常量源=[
dataWithNamespace('0'),
dataWithNamespace('1'),
dataWithNamespace('2'),
dataWithNamespace('3'),
dataWithNamespace('4'),
dataWithNamespace('more Ribbs','bbq1'),
dataWithNamespace('more Ribbs','bbq1'),
dataWithNamespace('brisket','best bbq namespace')
];
常量DBBQ=(去BounceTimeout,maxBatchSize)=>
source$=>source$
.groupBy(x=>x.namespace)
.mergeMap(分组$=>grouped$
.switchMap(x=>
可观测的(x数据)
.concat(Rx.observative.of(未定义)
.延迟(去BounceTimeout)
)
)
.bufferCount(maxBatchSize)
.filter(x=>x.length==maxBatchSize)
.map(x=>x.filter(x=>x!==未定义))
);
const source$=Rx.Observable.from(source);
DBBQ(1000,2)(源代码$).subscribe(console.log)

我不可能用ES5这么做:)

constdatawithnamespace=(数据,名称空间)=>({data,名称空间});
常量源=[
dataWithNamespace('0'),
dataWithNamespace('1'),
dataWithNamespace('2'),
dataWithNamespace('3'),
dataWithNamespace('4'),
dataWithNamespace('more Ribbs','bbq1'),
dataWithNamespace('more Ribbs','bbq1'),
dataWithNamespace('brisket','best bbq namespace')
];
常量DBBQ=(去BounceTimeout,maxBatchSize)=>
source$=>source$
.groupBy(x=>x.namespace)
.mergeMap(分组$=>grouped$
.switchMap(x=>
可观测的(x数据)
.concat(Rx.observative.of(未定义)
.延迟(去BounceTimeout)
)
)
.bufferCount(maxBatchSize)
.filter(x=>x.length==maxBatchSize)
.map(x=>x.filter(x=>x!==未定义))
);
const source$=Rx.Observable.from(source);
DBBQ(1000,2)(源代码$).subscribe(console.log)

有一个操作员™: . 如果您需要它是真正等效的,那么输入流将是一个
主题
,对于名称空间,具有
分组依据
,如下所示:

var dbbq$=新主题();
dbbq$.group_by(函数(v_ns){return v_ns[1];})
.flatMap(功能){
返回S.bufferwithtimeorcount(1000,2)
});
dbbq$.next(['0']);
dbbq$.next(['更多肋骨','bbq1']);
//类似于
var dbbq=新dbbq(1000,2);
dbbq.add('0');
dbbq.添加(‘更多肋骨’、‘bbq1’);

有一个操作员™: . 如果您需要它是真正等效的,那么输入流将是一个
主题
,对于名称空间,具有
分组依据
,如下所示:

var dbbq$=新主题();
dbbq$.group_by(函数(v_ns){return v_ns[1];})
.flatMap(功能){
返回S.bufferwithtimeorcount(1000,2)
});
dbbq$.next(['0']);
dbbq$.next(['更多肋骨','bbq1']);
//类似于
var dbbq=新dbbq(1000,2);
dbbq.add('0');
dbbq.添加(‘更多肋骨’、‘bbq1’);

从您的链接中可以看到,
bufferwithtimeorcount
是RxJS V4版本,可惜RxJS V5中没有。相反,使用“bufferTime”和第三个参数来设置计数。从您的链接中可以看到,
bufferwithtimeorcount
是RXJSV4版本,可惜RXJSV5中没有。相反,使用“bufferTime”和第三个参数来设置计数。