Javascript 在Rxjs中,如何缓冲一个简单的可观察对象?
我想用一些任意(但简单)的标准来缓冲一个可观察的对象。我在这里设置了一个简单的示例:Javascript 在Rxjs中,如何缓冲一个简单的可观察对象?,javascript,node.js,rxjs,reactive-programming,rxjs5,Javascript,Node.js,Rxjs,Reactive Programming,Rxjs5,我想用一些任意(但简单)的标准来缓冲一个可观察的对象。我在这里设置了一个简单的示例: const observable = Rx.Observable.from([1,2,3]) const filtered = observable.filter((n) => n === 3); observable .buffer(filtered) .subscribe((n) => { // Why is this empty? console.log(n); });
const observable = Rx.Observable.from([1,2,3])
const filtered = observable.filter((n) => n === 3);
observable
.buffer(filtered)
.subscribe((n) => {
// Why is this empty?
console.log(n);
});
尝试使用filter
执行此操作只会生成一个空数组。我期待一个[1,2,3]
数组,但它似乎不是这样工作的。缓冲区的所有文档都使用异步事件,如计时器,但这不是我想要的。我只想根据我所决定的一些任意标准来选取最后n项
非常感谢您的帮助 您的订阅是在发出值之后进行的。如果您希望它工作:
const observable = new Rx.Subject()
const filtered = observable.filter((n) => n === 3);
filtered
.buffer(filtered)
.subscribe((n) => {
console.log(n);
});
Rx.Observable.from([1,2,3]).subscribe(observable);
根据olsn的评论,这似乎是Rxjs 5中的一个bug。更改为v4有效地解决了这个问题。如果您想缓冲到每3个项目,您可以在检查JSBin后使用
bufferCount(3)
。您的问题似乎与此错误修复有关,它似乎与下一个次要版本一起发布:抱歉,澄清一下:3只是一个示例,所以bufferCount不是我想要的(它可以是任何数字)。我不能让补丁做我想做的,但无论如何,公关似乎还没有登陆。v4似乎可以工作,但是它在完成时会发出一个最终的空数组。这是预期的吗?Bin here:我很确定这就是我发布链接的bug,你的行为是不可预料的。你可以使用scan
,但是我建议你为此创建一个新问题,由于评论部分中的长对话对其他可能有相同问题的人没有帮助,但这不会将缓冲的可观察对象与订阅连接起来。。。还是我遗漏了什么?