我正在尝试使用Angular5设置HTTP请求的最大超时,这是基于发现的内容:
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
constructor(private tokenService:TokenService) {}
/**
* This method will add the Authorization header on each API request
* @param request
* @param next
*/
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (request.url.includes('/api/')) {
request = request.clone({ setHeaders: { Authorization: 'Bearer ' + this.tokenService.getToken() } });
return next.handle(request).timeout(1, Observable.throw("Request timed out"));
}
return next.handle(request);
}
}
除了说 timeout does not exist on type Observable<HttpEvent<any>>
如何设置请求超时?
注意:我还没有找到延长超时的方法,但这可以让您将超时编辑为比默认的2分钟短。如果您要在后端上发布一些内容,需要花费2分钟以上的时间进行处理,则应提醒客户端您有数据,并在尝试处理该数据,而不是尝试延长超时时间。
以下是缩短超时的方法:
在您的应用程序模块内部,您应该创建具有自定义超时(以毫秒为单位)的拦截器。
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { TimeoutError } from 'rxjs/util/TimeoutError';
import 'rxjs/add/operator/timeout';
import { InjectionToken, Injectable, Inject } from '@angular/core';
import { HttpHandler, HttpRequest, HttpInterceptor, HttpEvent } from '@angular/common/http';
const DEFAULT_TIMEOUT = new InjectionToken<number>('defaultTimeout');
const defaultTimeout = 5000;
@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);
}
}
将此添加到您的提供商列表:
[{ provide: HTTP_INTERCEPTORS, useClass: TimeoutInterceptor, multi: true }],
[{ provide: DEFAULT_TIMEOUT, useValue: defaultTimeout }]
发出请求时,您要添加使用拦截器的自定义标头,如下所示:
const options = {
headers: new HttpHeaders({ timeout: `${3600000}` }),
params: params,
reportProgress: true,
Timeout: 5000
};
现在,当您发出的请求达到5000毫秒超时时,它应该停止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句