Angular HttpClient默认和特定请求超时
发布时间:2020-12-17 08:01:31 所属栏目:安全 来源:网络整理
导读:通常希望具有将应用于所有请求的默认超时(例如30s),并且可以针对特定的更长请求(例如600s)覆盖。 据我所知,在Http中没有指定默认超时的好方法。 在HttpClient中解决这个问题的方法是什么? 如何为所有传出请求定义默认超时,可以覆盖特定的超时? 似乎在没
通常希望具有将应用于所有请求的默认超时(例如30s),并且可以针对特定的更长请求(例如600s)覆盖。
据我所知,在Http中没有指定默认超时的好方法。 在HttpClient中解决这个问题的方法是什么?
似乎在没有扩展HttpClientModule类的情况下,拦截器与各个请求通信的唯一预期方式是params和header对象。
由于超时值是标量,因此可以安全地将其作为自定义标头提供给拦截器,在此可以确定是否应该通过RxJS超时运算符应用它的默认或特定超时: import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/timeout'; const DEFAULT_TIMEOUT = new InjectionToken<number>('defaultTimeout'); const defaultTimeout = 10000; @Injectable() export class TimeoutInterceptor implements HttpInterceptor { constructor(@Inject(DEFAULT_TIMEOUT) protected defaultTimeout) {} intercept(req: HttpRequest<any>,next: HttpHandler): Observable<HttpEvent<any>> { const timeout = Number(req.headers.get('timeout')) || this.defaultTimeout; return next.handle(req).timeout(timeout); } } ... providers: [ [{ provide: HTTP_INTERCEPTORS,useClass: TimeoutInterceptor,multi: true }],[{ provide: DEFAULT_TIMEOUT,useValue: defaultTimeout }] ],... 然后使用自定义超时标头完成请求 http.get(...,{ headers: new HttpHeaders({ timeout: `${20000}` }) }); 由于标头应该是字符串,因此应该首先将超时值转换为字符串。 这是a demo。 积分转到@RahulSingh和@ Jota.Toledo建议使用具有超时的拦截器的想法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |