2016-06-28 119 views
2

我正在從事件構建可觀察事件,該事件輸出的文本行確認被兩條空行分隔的記錄。例如:Split RxJS可觀察輸出

xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 


xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 


xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 

我想可觀察由兩個新的線路的輸出分割,所以訂戶得到在塊中的數據。

我該如何使用RxJS來實現?它似乎沒有執行這項工作的功能。

我可以訂閱觀察者,積累價值並重新發布自己,但我相信有一個更優雅的解決方案,我沒有看到。

+0

最好是暴露在大理石,這基本上是你的投入和預期產出在時間軸上您的要求。否則,你的意思是說你的觀測值一次只輸出一行?因此,空行只是一個\ n? – user3743222

回答

2

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$);