목차

Practical observable usage

다음은 관찰 성이 특히 유용한 도메인의 예입니다.

Type-ahead suggestions

옵서버블은 사전 형 제안의 구현을 단순화 할 수 있습니다. 일반적으로 사전 판매는 일련의 별도 작업을 수행해야합니다.

이것을 전체 자바 스크립트로 작성하는 것은 상당히 복잡 할 수 있습니다. observables를 사용하면 간단한 일련의 RxJS 연산자를 사용할 수 있습니다.

import { fromEvent } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { map, filter, debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
 
const searchBox = document.getElementById('search-box');
 
const typeahead = fromEvent(searchBox, 'input').pipe(
  map((e: KeyboardEvent) => e.target.value),
  filter(text => text.length > 2),
  debounceTime(10),
  distinctUntilChanged(),
  switchMap(() => ajax('/api/endpoint'))
);
 
typeahead.subscribe(data => {
 // Handle the data from the API
});

Exponential backoff

기하 급수적 백 오프는 실패 후 API를 다시 시도하여 연속적인 실패가 발생할 때마다 다시 시도 간격을 늘리고 요청이 실패한 것으로 간주되는 최대 재시도 횟수로 만듭니다. 이것은 약속과 AJAX 호출을 추적하는 다른 방법으로 구현하기에는 상당히 복잡 할 수 있습니다. Observables를 사용하면 매우 쉽습니다.

import { pipe, range, timer, zip } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { retryWhen, map, mergeMap } from 'rxjs/operators';
 
function backoff(maxTries, ms) {
 return pipe(
   retryWhen(attempts => zip(range(1, maxTries), attempts)
     .pipe(
       map(([i]) => i * i),
       mergeMap(i =>  timer(i * ms))
     )
   )
 );
}
 
ajax('/api/endpoint')
  .pipe(backoff(3, 250))
  .subscribe(data => handleData(data));
 
function handleData(data) {
  // ...
}