正在处理
angular 6
Angular HttpClient interceptors
,相似但不相同:
在我的场景中,没有客户端缓存,服务器会立即返回数据,尽管是陈旧的,但是客户端需要更新,即使是陈旧的数据,在收到陈旧的数据时,会再次调用服务器,这次设置
refresh = true
当第二次调用结束时,客户端将再次刷新(这次使用新信息)
这是我的尝试,很有效,但感觉很笨拙。
有办法让它更好吗?(更符合rxjs/无功方式)
intercept(req: HttpRequest<any>, next: HttpHandler) {
let stale = false;
let response: any;
return next.handle(req)
.pipe(
filter(event => event instanceof HttpResponse),
tap(event => {
if (event['body'].expired) {
stale = true;
}
response = event;
}),
switchMap(event => {
if (stale) {
req.body['refresh'] = true;
const freshResults$ = next.handle(req);
return freshResults$.pipe(startWith(response));
} else {
return of(response);
}
})
);
}