在收到特定的 http 状态时重试 http 调用
Retrying a http call on receiving a certain http status
我正在尝试捕获并重试 103 Http 错误状态响应。如果服务器理解请求并将开始处理它但资源立即不可用,则服务调用 returns 103。我想做的是当我收到 103 时,我想每 5 秒重试一次获取资源最多 5 次,最后我希望它超时并返回 404 错误。这是我目前所拥有的
getDoc() {
return this.getError()
.retryWhen((errors: any) => {
return errors.switchMap((sourceError) => {
console.log(sourceError);
if (sourceError.status === 103) {
console.log('status is 103');
const notFoundError = new HttpErrorResponse({
status: 404
});
return errors.delay(5000).take(5).concat(Observable.throw(notFoundError));
}
return Observable.throw(sourceError);
});
})
.toPromise();
}
getError() {
console.log('getting error');
return Observable.throw(new HttpErrorResponse({
status: 103
}));
}
使用 getError() 函数,我试图模拟 103,因为服务器尚未发送 103。也许 getError() 不是 httpError 响应的良好表示。我不确定如何重现并引发可观察到的错误。
无论如何,这个设置是行不通的。它调用 getError(),失败并一直运行到 console.log('status is 103'),之后什么也没有。感谢任何帮助。
您可以使用 HttpInterceptor.
@Injectable()
export class ServiceCallProvider implements HttpInterceptor {
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).do((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
// do stuff with response if you want
}
}, (err: any) => {
if (err instanceof HttpErrorResponse) {
if (err.status === 103) {
// handle logic
}
}
});
}
}
我正在尝试捕获并重试 103 Http 错误状态响应。如果服务器理解请求并将开始处理它但资源立即不可用,则服务调用 returns 103。我想做的是当我收到 103 时,我想每 5 秒重试一次获取资源最多 5 次,最后我希望它超时并返回 404 错误。这是我目前所拥有的
getDoc() {
return this.getError()
.retryWhen((errors: any) => {
return errors.switchMap((sourceError) => {
console.log(sourceError);
if (sourceError.status === 103) {
console.log('status is 103');
const notFoundError = new HttpErrorResponse({
status: 404
});
return errors.delay(5000).take(5).concat(Observable.throw(notFoundError));
}
return Observable.throw(sourceError);
});
})
.toPromise();
}
getError() {
console.log('getting error');
return Observable.throw(new HttpErrorResponse({
status: 103
}));
}
使用 getError() 函数,我试图模拟 103,因为服务器尚未发送 103。也许 getError() 不是 httpError 响应的良好表示。我不确定如何重现并引发可观察到的错误。
无论如何,这个设置是行不通的。它调用 getError(),失败并一直运行到 console.log('status is 103'),之后什么也没有。感谢任何帮助。
您可以使用 HttpInterceptor.
@Injectable()
export class ServiceCallProvider implements HttpInterceptor {
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).do((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
// do stuff with response if you want
}
}, (err: any) => {
if (err instanceof HttpErrorResponse) {
if (err.status === 103) {
// handle logic
}
}
});
}
}