Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Rxjs中,如何缓冲一个简单的可观察对象?_Javascript_Node.js_Rxjs_Reactive Programming_Rxjs5 - Fatal编程技术网

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
,但是我建议你为此创建一个新问题,由于评论部分中的长对话对其他可能有相同问题的人没有帮助,但这不会将缓冲的可观察对象与订阅连接起来。。。还是我遗漏了什么?