2016-06-28 17 views
2

イベントからオブザーバブルを構築しています。これは、2行の空行で分割されたレコードを確認するテキスト行を出力します。例:分割可能なRxJS観測可能出力

xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 


xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 


xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 

私は、観測者が2つの新しい行で出力を分割して、サブスクライバがデータをチャンクで取得するようにしたいと思います。

どのようにしてRxJSを使用してこれを達成できますか?このジョブを実行する機能はないようです。

私はオブザーバーを購読して値を蓄積し、自分自身を再発行することができましたが、私が見ていないより洗練されたソリューションがあると思います。

+0

ベストあなたの入力と期待される出力は、タイムライン上で基本的にある大理石、中にあなたの要件を公開することです。そうでなければ、あなたの観測値は一度に1行だけ出力されるということですか?したがって空の行は\ nですか? – user3743222

答えて

2

buffersamplescanの組み合わせも可能です。基本的に入力(すなわち線)はバッファに蓄積されます。オブザーバブルが値を出力するたびにこのバッファを解放します。sampleです。それで、観察可能な値が2つの連続を検出するたびに値を出すようにします。\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$); 
関連する問題