2017-03-30 6 views
3

나는 data 배열에 관찰 가능한 모든 이벤트를 수집하고 있습니다 :0 시간에 RxJS Observable 이벤트를 얻는 방법?

const obs$ = Rx.Observable 
 
    .interval(500) 
 
    .take(4); 
 

 
let data = []; 
 
const start = performance.now(); 
 

 
obs$.subscribe(
 
    value => { 
 
    data.push({ 
 
     time: performance.now() - start, 
 
     data: value 
 
    }); 
 
    }, 
 
() => {}, 
 
() => { 
 
    console.log(JSON.stringify(data, null, 2)); 
 
    } 
 
);
<script src="https://unpkg.com/[email protected]/bundles/Rx.js"></script>

그것은 "미래를 예견"2 초를 기다리지 않고 같은 data 배열 에 접근 가능?

분명히하기 위해 이벤트를 즉시 얻을 수 있도록 주어진 Observable (위 예제의 obs$)을 사용자 지정 타이머/스케줄러로 포장하는 방법을 찾으려고합니다.

+0

난 당신이 무엇을 요구 정말 모르겠어요. ['interval'] (http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-interval)은 지정된 간격으로 정수 시퀀스를 방출합니다. 정수 시퀀스를 즉시 출력하려면 ['range'] (http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-range)를 대신 사용할 수 있습니다. . – cartant

+0

@cartant 나는 이벤트를 즉시 얻을 수 있도록 어떻게 든 주어진 Observable (위의 예제에서'obs $')을 커스텀 타이머/스케줄러로 포장하는 방법을 찾고있다. –

답변

3

VirtualTimeScheduler의 인스턴스를 만들고 interval을 호출하여 지정할 수 있습니다. 당신이 다음에 가입 한 후 스케줄러에 flush를 호출 할 경우

, 이벤트는 즉시 방출됩니다

const scheduler = new Rx.VirtualTimeScheduler(); 
 

 
const obs$ = Rx.Observable 
 
    .interval(500, scheduler) 
 
    .take(4); 
 

 
let data = []; 
 
const start = scheduler.now(); 
 

 
obs$.subscribe(
 
    value => { 
 
    data.push({ 
 
     time: scheduler.now() - start, 
 
     data: value 
 
    }); 
 
    }, 
 
() => {}, 
 
() => { 
 
    console.log(JSON.stringify(data, null, 2)); 
 
    } 
 
); 
 

 
scheduler.flush();
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/[email protected]/bundles/Rx.js"></script>

+0

감사합니다. 그게 내가 찾고 있던거야. 유일한 질문은 다음과 같습니다. 기존 Observable을 가져 와서 스케줄러를 삽입 할 수 있습니까? –

+0

내가 아는 것은 아닙니다. ['observeOn'] (http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-observeOn)과 ['subscribeOn'] (http://reactivex.io)가 있습니다. /rxjs/class/es6/Observable.js~Observable.html#instance-method-subscribeOn) 연산자를 사용하지만 소스 관찰 가능 스케줄러는 변경하지 않습니다. – cartant

관련 문제