我目前面临的一个问题是,第一次搜索可能需要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,我认为这不是预期的行为。
添加回答
举报
0/150
提交
取消