gpt4 book ai didi

angular - 在 Http 拦截器上捕获已取消/中止的请求。 Angular 8

转载 作者:行者123 更新时间:2023-12-04 01:31:44 26 4
gpt4 key购买 nike

我在使用 Angular 8 构建的应用程序中遇到问题。

我有一个应用程序级别的微调器,它会为发出的每个 http 请求打开并在响应时关闭。

这些请求由显示加载微调器的 HttpInterceptor 捕获,并在获得响应时隐藏。当其中一些 http 调用被取消时,问题就来了,如本例所示:

  search(param: string) {
return terms.debounceTime(SEARCH_DEBOUNCE)
.distinctUntilChanged()
.switchMap(term => this.search(param));
}

上面的代码属于文本搜索引擎,当您停止输入一段时间后,就会执行搜索。如果完成得太快,可能会同时发出多个请求,然后 switchMap 会取消这些请求。出于这个原因,当请求被取消时,拦截器无法获得该取消的状态,因此微调器永远不会消失。

拦截器做这样的事情:

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
// the spinner is shown

return next.handle(request).pipe(
catchError(error => {
// error handling and spinner stop
}),
finalize(() => {
// Access to all responses except cancelled requests, which have no response.
})
);

因此对于请求被取消或中止的情况,我无法停止微调器。

最佳答案

如果您的目标是在没有任何特定条件的情况下停止微调器,但只是在 return 语句中,您可以像这样使用 tap 运算符 ( https://rxjs-dev.firebaseapp.com/api/operators/tap):

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
// the spinner is shown

return next.handle(request).pipe(
catchError(error => {

// Do things
}),
finalize(() => {
// Do things
}),
tap(()=> /* stop spinning */)
);

关于angular - 在 Http 拦截器上捕获已取消/中止的请求。 Angular 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60885855/

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