더북(TheBook)

2.4.3 옵저버블 모듈

옵저버 객체를 직접 호출하면 구독자에게 전달되는 데이터를 정의할 수 있습니다. 이 데이터가 어떻게 생성되고 어디서 오는지는 옵저버블의 컨텍스트에 캡슐화됩니다. 예를 들어 사용자가 장기 실행 연산을 수행할 때 사용하는 간단한 진행률 표시기 위젯을 만든다고 해봅시다. 이 모듈은 다음 예제와 같이 특정 속도로 0%에서 100%까지의 백분율 값을 생성합니다.

예제 2-4 RxJS를 사용하는 사용자 정의 진행률 표시기 모듈

const progressBar$ = Rx.Observable.create(observer => {
  const OFFSET = 3000; -- 3초 뒤에 진행률 표시기의 카운터가 시작됩니다.
  const SPEED =  50; -- 50밀리초마다 새로운 진행률 값을 방출합니다.
 
  let val = 0;
  function progress() {
    if(++val <= 100) {
      observer.next(val); -- 50밀리초마다 새로운 진행률 값을 방출합니다.
      setTimeout(progress, SPEED); -- 재귀적으로 진행률 함수를 호출합니다.
    }
    else {
      observer.complete(); -- 100%에 도달한 후에 완료 신호를 전송합니다.
    }
  };
  setTimeout(progress, OFFSET); -- 3초 뒤에 진행률 표시기의 카운터가 시작됩니다.
});
 
window.onload = function() {
  const label = document.querySelector('#progress-indicator');
  progressBar$
    .subscribe(
      val => label.textContent = (Number.isInteger(val) ? val + "%" : val),
      error => console.log(error.message),
      () => label.textContent = 'Complete!'
    );
  };

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.