Работа над приложением angular 6
.Сценарий похож на описанный здесь Угловые перехватчики HttpClient , похожи, но не идентичны:
В моем сценарии нет кэша на стороне клиента, сервер возвращает данные немедленно, хотя и устарел, ноклиент должен быть обновлен, даже с устаревшими данными, после получения устаревших данных на сервер выполняется второй вызов, на этот раз установка 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);
}
})
);
}