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建议使用具有超时的拦截器的想法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
