반응형
첫 번째 http 요청이 완료되었을 때만 새 http 요청을 실행하고 중간에 다른 모든 요청을 무시/취소하는 방법
나는 Angul2로 SPA의 프런트 엔드를 만들고 있고, 나는 많은 레코드가 있는 데이터베이스를 가지고 있고 데이터베이스 자체는 매우 느려서, 10000 레코드(또는 Order BY와 함께 마지막 10개)를 찍는 데 최대 4-5초가 걸린다.내 상황에서는 데이터베이스를 업그레이드할 수 없다.
따라서 내가 하고 싶은 것은 사용자가 페이지 작성자의 "다음" 버튼(다음 클릭은 이미 호출됨)을 여러 번 클릭할 때(최대 100회 이상 계속 클릭한다고 가정하자), 첫 번째 http 요청만 서버/API로 전송되는 것이다.이제 내가 그것을 알아낼 수 없는 부분이다.
첫 번째 요청이 결과와 함께 돌아오면 마지막 클릭 이벤트가 첫 번째 요청과 마지막 요청 사이의 다른 모든 클릭 요청을 무시한 새 요청을 실행한다(클릭 자체는 아닌 요청).그런 다음 사용자가 계속 클릭하는 경우 마지막 클릭/요청이 첫 번째 클릭이 되고 기타 등등...
RxJS로 그렇게 하려고 했는데 간격만 사용해서 간신히 해냈기 때문에 간격이 600ms이고 사용자가 1000ms마다 클릭을 하면 모든 요청이 서버로 전송된다.내 암호는 다음과 같다.
private clickStream = new Subject();
ngOnInit() {
this.clickStream
.debounce(() => Observable.interval(600).take(1))
.subscribe(
params => {
this.callHttpPostMethod();
}
);
}
onNextClick(event) {
this.clickStream.next(event);
}
모든 각도2 용액은 환영할 것이다. RxJS를 사용하는 것은 요구 사항이 아니다.
기내 요청을 취소하고 switchMap을 사용하여 최신 요청만 처리하는지 확인하십시오.
this.clickStream
.debounceTime(500)
.switchMap(e=> this.callHttpPostMethod())
.subscribe(t=> {
... do something ...
});
반응형
'Programing' 카테고리의 다른 글
Vuex - 계산된 속성 "name"이(가) 할당되었지만 세터가 없음 (0) | 2022.03.11 |
---|---|
참조에 이벤트 수신기를 추가하는 방법 (0) | 2022.03.11 |
기본 반응 - NavigationActions.navigate()가 Redex 내에서 탐색하지 않음 (0) | 2022.03.10 |
Python에서 '이넘'을 어떻게 대표할 수 있을까? (0) | 2022.03.10 |
Vue2에서 디바운스를 구현하는 방법? (0) | 2022.03.10 |