함수: injectRateLimiter()
function injectRateLimiter<TFn, TSelected>(
fn,
options,
selector): AngularRateLimiter<TFn, TSelected>;
정의 위치: angular-pacer/src/rate-limiter/injectRateLimiter.ts:114
RateLimiter 인스턴스를 생성하고 관리하는 Angular 함수입니다.
RateLimiter 기능에 직접 접근할 수 있게 해 주는 저수준 함수입니다. 원하는 상태 관리 솔루션과 통합할 수 있습니다.
요청률 제한은 시간 창 안에서 최대 횟수에 도달할 때까지 실행을 허용한 뒤, 창이 초기화될 때까지 모든 후속 호출을 차단하는 단순한 "하드 리밋" 방식입니다. 스로틀이나 디바운스와 달리 실행 간격을 조정하거나 지능적으로 병합하지 않습니다.
요청률 제한기는 두 가지 창 유형을 지원합니다.
- 'fixed': 창 기간이 지나면 초기화되는 엄격한 창입니다. 창 안의 모든 실행이 제한 횟수에 포함되며, 기간이 지나면 창이 완전히 초기화됩니다.
- 'sliding': 이전 실행이 만료되는 대로 새 실행을 허용하는 이동 창입니다. 시간에 따라 더 일관된 실행률을 제공합니다.
더 부드러운 실행 패턴이 필요하다면 다음을 사용합니다.
- 실행 사이에 일정한 간격이 필요할 때는 스로틀을 사용합니다(예: UI 업데이트).
- 빠르게 연속 발생하는 이벤트를 병합하려면 디바운스를 사용합니다(예: 검색 입력).
- 하드 리밋을 적용해야 할 때만 요청률 제한을 사용합니다(예: API 요청률 제한).
상태 관리와 셀렉터
이 함수는 TanStack Store로 상태를 관리하고 이를 Angular 시그널로 래핑합니다.
selector 매개변수로 어떤 상태 변경이 시그널 업데이트를 트리거할지 지정할 수 있으며,
관련 없는 상태가 변경될 때 불필요한 업데이트를 방지하여 성능을 최적화합니다.
기본적으로 반응형 상태 구독은 없습니다. 반응형 상태를 추적하려면 셀렉터 함수를 제공하여 명시적으로 활성화해야 합니다. 이를 통해 불필요한 업데이트를 방지하고 컴포넌트가 상태 변경을 추적할 시점을 완전히 제어할 수 있습니다.
사용할 수 있는 상태 속성은 다음과 같습니다.
executionCount: 완료된 함수 실행 횟수executionTimes: 요청률 제한 계산에 사용되는 실행 시점 타임스탬프 배열rejectionCount: 요청률 제한으로 거부된 함수 실행 횟수
제거 시 정리
컴포넌트가 제거될 때 콜백을 실행하려면 onUnmount 옵션을 사용합니다.
타입 매개변수
TFn
TFn extends AnyFunction
TSelected
TSelected = {
}
매개변수
fn
TFn
options
AngularRateLimiterOptions<TFn, TSelected>
selector
(state) => TSelected
반환값
AngularRateLimiter<TFn, TSelected>
예시
// Default behavior - no reactive state subscriptions
const rateLimiter = injectRateLimiter(apiCall, {
limit: 5,
window: 60000,
windowType: 'sliding',
});
// Opt-in to track execution count changes
const rateLimiter = injectRateLimiter(
apiCall,
{
limit: 5,
window: 60000,
windowType: 'sliding',
},
(state) => ({ executionCount: state.executionCount })
);
// Monitor rate limit status
const handleClick = () => {
const remaining = rateLimiter.getRemainingInWindow();
if (remaining > 0) {
rateLimiter.maybeExecute(data);
} else {
showRateLimitWarning();
}
};
// Access the selected state (will be empty object {} unless selector provided)
const { executionCount, rejectionCount } = rateLimiter.state();