gpt4 book ai didi

javascript - 使用 switchMap 取消订阅以前的 http 请求,只接收最新的请求

转载 作者:可可西里 更新时间:2023-11-01 16:29:27 25 4
gpt4 key购买 nike

我目前面临一个问题,第一次搜索可能需要 5 秒,第二次需要 2 秒,问题是,第一次搜索需要更长的时间,将“删除”已完成请求的结果之后,因为通话结束之后。

我试着阅读一下

switchMap

在 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;
});
}

最佳答案

哪个事件触发了搜索?此事件应该是您的 Observable 的来源,它将使用 switchMap 运算符“通过管道传输”。

正如我在这里看到的,如果您为每个事件调用 loadDogsResults(),它不会起作用,因为您每次都创建一个新的 Observableof(filtersInformation) 是一个 Observable,它在订阅 observable 时发出一次 filtersInformation 值,我认为这不是预期的行为。

关于javascript - 使用 switchMap 取消订阅以前的 http 请求,只接收最新的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55867966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com