首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在angular 6和rxjs 6中有新请求时取消正在进行的HTTP请求

如何在angular 6和rxjs 6中有新请求时取消正在进行的HTTP请求
EN

Stack Overflow用户
提问于 2018-08-01 02:53:55
回答 1查看 7.4K关注 0票数 5

我的应用中有下面的RxnsSearchServiceRxnsSearchHitCountService,两个超文本传输协议服务。

使用forkJoin处理两个请求,如以下代码所示。

代码语言:javascript
复制
constructor(
  private rxnsSearchService: RxnsSearchService,
  private rxnsSearchHitCountService: RxnsSearchHitCountService
) { }
const rxnsObservable: Observable<Array<any>> = this.rxnsSearchService.getReactions(this.searchParams, filters);
const headCountObservable: Observable<number> = this.rxnsSearchHitCountService.getHitCount(this.searchParams, filters);
forkJoin([rxnsObservable, headCountObservable]).pipe().subscribe((results) => { //handling results 
},
  error => {
    console.log(error);
  });

每当有新的请求到来时,我想取消正在进行的旧请求。有没有人能帮我,让它正常工作?

代码语言:javascript
复制
export class RxnsSearchService {
  sub: Subject<any> = new Subject();
  constructor(private httpClient: HttpClient) {}

  getReactions(params: Params, offset: number, perPage: number, filters: any) {
    const body = {
      filters: filters,
      query: params.query
    };
     return this.httpClient.post(environment.rxnsSearch, body).pipe(
      map((response: Array<any>) => {
        return response;
      }),
      catchError(error => {
        console.log(error);
        return throwError(error);
      })
    );
  }
}

代码语言:javascript
复制
export class RxnsSearchHitCountService {
  constructor(private httpClient: HttpClient) {}

  getHitCount(params: Params, filters: any) {
    const body = {
      filters: filters,
      query: params.query,
    };
    return this.httpClient.post(environment.rxnsSearchHitCount, body).pipe(
      map((response: number) => {
        return response;
      }),
      catchError(error => {
        console.log(error);
        return throwError(error);
      })
    );
  }
}

EN

回答 1

Stack Overflow用户

发布于 2018-08-01 02:57:08

您可以简单地使用RxJs中的去反弹运算符:

代码语言:javascript
复制
debounce(1000);

这是中提供的一种方法,用于在发送任何请求之前设置以毫秒为单位的延迟。

该示例将1000ms内触发的所有请求仅替换为一个请求。

有关详细信息,请执行以下操作:

代码语言:javascript
复制
fromEvent(input, 'input').pipe(
       map((e: any) => e.target.value),
       debounceTime(500),
       distinctUntilChanged()
     ).subscribe(
       (data) => {
           this.onFilterTable({column: fieldName, data});
       }
     );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51620217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档