为了账号安全,请及时绑定邮箱和手机立即绑定

使用switchMap取消订阅先前的HTTP请求,仅接收最新的一个

使用switchMap取消订阅先前的HTTP请求,仅接收最新的一个

翻翻过去那场雪 2021-05-04 13:14:33
我目前面临的一个问题是,第一次搜索可能需要5秒钟,而第二个搜索则需要2秒钟,问题是,第一次搜索需要更长的时间,将“擦除”此后执行的请求的结果,因为通话结束。我试图阅读有关switchMap在rxJs中并尝试使用它,但是从我的尝试来看,它不会取消订阅先前的请求并清除了结果。我可能在这里做错了什么,但我无法确切指出问题所在。合并在结果中有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;      });  }
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

哪个事件触发search?此事件应该是您的的来源Observable,它将与switchMap运算符“ piped” 。

正如我在这里看到的那样,如果您要求loadDogsResults()每个事件,那么Observable每次创建一个新事件都将无效。of(filtersInformation)是一个Observable,它在filtersInformation订阅了observable时发出值ONCE,我认为这不是预期的行为。


查看完整回答
反对 回复 2021-05-13
  • 3 回答
  • 0 关注
  • 297 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信