서버에 일련의 요청을 사용하고 싶지만 서버의 초당 제한 요청 비율은 10입니다. 루프에서 요청을 만들려고하면 모든 요청이 동시에 발생하기 때문에 속도 제한에 도달합니다.RxJS를 사용하여 무손실로 요청을 제한하는 방법 5
for(let i = 0; i < 20; i++) {
sendRequest();
}
ReactiveX에는 관찰 가능한 스트림을 수정하기위한 많은 도구가 있지만 속도 제한을 구현할 도구를 찾지 못하는 것 같습니다. 나는 표준 지연을 추가하려고 시도했지만, 요청은 여전히 이전에했던 것보다 100ms 늦게 같은 시간에 실행됩니다.
const queueRequest$ = new Rx.Subject<number>();
queueRequest$
.delay(100)
.subscribe(queueData => {
console.log(queueData);
});
const queueRequest = (id) => queueRequest$.next(id);
function fire20Requests() {
for (let i=0; i<20; i++) {
queueRequest(i);
}
}
fire20Requests();
setTimeout(fire20Requests, 1000);
setTimeout(fire20Requests, 5000);
debounceTime
및 throttleTime
운영자는 나뿐만 아니라 무엇을 찾고 있어요 유사하지만, 그 대신 손실의 손실이다. 이전 요청을 폐기하는 대신 모든 요청을 보존하고 싶습니다.
...
queueRequest$
.debounceTime(100)
.subscribe(queueData => {
sendRequest();
});
...
ReactiveX 및 Observables를 사용하여 속도 제한을 초과하지 않고 서버에 요청하는 방법은 무엇입니까?
참고로이 답변을 업데이트했습니다. 'until'계산은 최적이 아니 었습니다. 그것은 '지금'이 아니라 첫 번째 기록을 기반으로해야합니다. – cartant