2016-06-28 9 views
2

두 개의 빈 줄로 나뉘어지는 레코드를 확인하는 텍스트 줄을 출력하는 이벤트에서 관찰 가능을 구축하고 있습니다. 예를 들면 다음과 같습니다.분할 RxJS 관찰 가능 출력

xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 


xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 


xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 

두 개의 새 라인으로 출력을 나눠서 구독자가 청크로 데이터를 얻길 바랍니다.

RxJS를 사용하여 어떻게하면됩니까? 이 작업을 수행하는 기능이없는 것 같습니다.

나는 옵서버에 가입하여 값을 누적하고 나 자신을 재사용 할 수 있지만, 내가보기에는 더 멋진 해결책이 있다고 생각한다.

+0

가장 입력 및 예상 출력은 타임 라인에 기본적으로 대리석, 귀하의 요구 사항을 노출하는 것입니다 . 그렇지 않으면 한 번에 한 행씩 만 관찰 결과를 출력 할 수 있습니다. 그러므로 빈 줄은 \ n? – user3743222

답변

2

buffersamplescan의 조합도 가능합니다. 기본적으로 버퍼에 입력 (즉, 선)을 누적합니다. 관측 가능 값이 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$);