Split RxJS可观察输出
问题描述:
我正在从事件构建可观察事件,该事件输出的文本行确认被两条空行分隔的记录。例如:Split RxJS可观察输出
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
我想可观察由两个新的线路的输出分割,所以订户得到在块中的数据。
我该如何使用RxJS来实现?它似乎没有执行这项工作的功能。
我可以订阅观察者,积累价值并重新发布自己,但我相信有一个更优雅的解决方案,我没有看到。
答
buffer
和sample
和scan
的组合也可以工作。基本上你可以在缓冲区中累积输入(即行)。每当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$);
最好是暴露在大理石,这基本上是你的投入和预期产出在时间轴上您的要求。否则,你的意思是说你的观测值一次只输出一行?因此,空行只是一个\ n? – user3743222