2016-08-18 5 views

답변

6

을 이해할 수있는 어떤 시나리오 &tldr;

당신이 경우 Schedulers 자신을 염려 할 필요가 없습니다 것입니다 대부분의 경우 단지의 경우 90 %의 기본 괜찮 있다는 사실을.

Scheduler

설명은 단순히 RxJS를 사용할 때 시간을 표준화하는 방법입니다. 그것은 실제로 일정이 미래에 언젠가 발생하는 이벤트를 발생합니다.

schedule 메서드를 사용하면 스케줄러가 앞으로 실행할 새로운 작업을 대기열에 추가 할 수 있습니다. Scheduler의 기능은 완전히 구현 된 것입니다. 종종 그것은 미래의 행동을 실행하는 가장 효율적인 수단을 선택하는 것에 불과합니다.

timer 연산자를 사용하여 향후 언젠가 작업을 실행하는 간단한 예를 들으십시오.

var source = Observable.timer(500); 

이것은 RxJS의 표준 요금입니다. Scheduler은 질문 할 때 나타납니다. 500은 무엇을 의미합니까? 기본 경우에는 500 밀리 초와 같을 것입니다. 이는 규칙이 무엇이며 기본값은 Scheduler이며, 500 밀리 초를 기다린 다음 이벤트를 내 보냅니다.

그러나 정상적으로 작동하는 데 시간의 흐름을 원하지 않는 경우가 있습니다. 이에 대한 가장 일반적인 사용 사례는 테스트 할 때입니다. 우리는 실제로 작업이 완료 될 때까지 500 밀리 초를 기다리고 싶지 않습니다. 그렇지 않으면 테스트 스위트가 실제로 완료 될 때까지 걸릴 것입니다!

이 경우 실제로 스트림의 결과를 검증하기 전에 500 밀리 초를 기다릴 필요가 없도록 시간의 흐름을 제어하려고합니다. 이 경우 작업을 동 기적으로 실행할 수있는 TestScheduler을 사용할 수 있으므로 비동기 성 난잡함을 처리 할 필요가 없습니다.

let scheduler = new TestScheduler(); 

//Overrides the default scheduler with the default scheduler 
let source = Observable.timer(500, scheduler); 

//Subscribe to the source, which behaves normally 
source.subscribe(x => expect(x).to.be(0)); 

//When this gets called all pending actions get executed. 
scheduler.flush(); 

우리는 시간 흐름을 변경하려는 경우가 더 많습니다. 예를 들어 게임 컨텍스트에서 작업하는 경우 우리는 또는 다른 가짜 시간 스케일에 스케줄링을 연결하려고합니다. AnimationFrameScheduler 또는 VirtualTimeScheduler과 같은 것을 사용해야합니다.