Programing

첫 번째 http 요청이 완료되었을 때만 새 http 요청을 실행하고 중간에 다른 모든 요청을 무시/취소하는 방법

c10106 2022. 3. 11. 21:51
반응형

첫 번째 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 ...
     });

참조URL: https://stackoverflow.com/questions/42781602/how-to-fire-a-new-http-request-only-when-the-first-one-is-completed-and-ignore-c

반응형