Split RxJS可观察输出

Split RxJS可观察输出

问题描述:

我正在从事件构建可观察事件,该事件输出的文本行确认被两条空行分隔的记录。例如:Split RxJS可观察输出

xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 


xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 


xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 

我想可观察由两个新的线路的输出分割,所以订户得到在块中的数据。

我该如何使用RxJS来实现?它似乎没有执行这项工作的功能。

我可以订阅观察者,积累价值并重新发布自己,但我相信有一个更优雅的解决方案,我没有看到。

+0

最好是暴露在大理石,这基本上是你的投入和预期产出在时间轴上您的要求。否则,你的意思是说你的观测值一次只输出一行?因此,空行只是一个\ n? – user3743222

buffersamplescan的组合也可以工作。基本上你可以在缓冲区中累积输入(即行)。每当observable发出一个值时,您都会释放此缓冲区,其中sample。然后你做到这一点,以便可观察的每次检测到连续两次时发出一个值\n。这可以通过scan来实现。请注意,这需要你的source$成为一个热门的观察者。

所以,你可以完成下面的代码,并保持如果它到底工作我们更新:

var detect_two_lines = function (acc, new_line)){ 
    // if new_line and last line of acc are both \n 
    // then acc.arr_lines = [], acc.found = true 
    // else acc.arr_lines.push(new_line), acc.found = false 
} 
var identity = function(x){return x} 
var sample$ = source$.scan(detect_two_lines, {arr_lines:[], found:false}) 
        .pluck('found') 
        .filter(identity); 
var results$ = source$.buffer(sample$);