我现在面临一个问题,第一次搜索可能需要5秒,第二次搜索需要2秒,问题是,第一次搜索需要更长的时间,会“擦除”之后完成的请求的结果,因为呼叫在之后结束。
我想看看
开关图
在rxjs中尝试使用它,但从我的尝试来看,它不会取消订阅先前的请求并删除结果。
可能是我做错了什么,但我不能确切指出问题所在。
merge在结果中有3个更改源(分页、排序或新的搜索条件),对sendsearchcriteria的调用返回所使用的数据。
sendSearchCriteria返回Observable
你有没有想到我做错了什么?
谢谢你的帮助,

private loadDogsResults = (filtersInformation: FilterSearchCriteria) => {
    merge(this.sort.sortChange, this.paginator.page, of(filtersInformation))
      .pipe(
        distinctUntilChanged(),
        tap(() => (this.isLoading = true)),
        switchMap(() => this.sendSearchCriteria(filtersInformation)),
        //mergeMap(() => this.sendSearchCriteria(filtersInformation)),
        map(data => this.formatResults(data)),
        finalize(() => (this.isLoading = false)),
        catchError(error => this.handleError(error)),
        takeUntil(this._onDestroy$)
      )
      .subscribe((result: any[]) => {
        if (result.length > 0) {
          this.setDisplayedColumns(result[0]);
        }
        this.isLoading = false;
      });
  }

最佳答案

哪个事件触发search?此事件应该是Observable的源,它将与switchMap运算符一起“管道传输”。
正如我在这里看到的,如果为每个事件调用loadDogsResults(),则每次创建一个新的Observable时都不会起作用。of(filtersInformation)是一个可观测值,当可观测值被订阅时会发出filtersInformation值,我不认为这是预期的行为。

10-06 08:17
查看更多