J'utilise Interceptors pour mettre en cache et retourner les données mises en cache dans le cadre de la fonctionnalité Angular 4.3 HttpClient. Vous trouverez ci-dessous le service utilitaire appelé par l'intercepteur pour stocker et renvoyer la réponse HTTP. Ci-dessous est mon intercepteur qui vérifie l'entrée en cache et renvoie si disponible.Conversion HttpResponse mis en cache comme observable dans HttpClient
@Injectable()
export class CacheInterceptorService implements HttpInterceptor {
constructor(private localStorageCacheService: LocalStorageCacheService) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req.method !== 'GET') {
return next.handle(req);
}
const cachedResponse = this.localStorageCacheService.get(req);
if (cachedResponse) {
**return Observable.of(cachedResponse);**
}
return next.handle(req).do(event => {
if (event instanceof HttpResponse) {
this.localStorageCacheService.put(req, event);
}
});
}
}
Le problème que j'ai est que, l'appel http ne touche pas la section d'abonnement du composant appelant. i.e instruction return Observable.of (cachedResponse); ne semble pas retourner correctement.
Des idées?
Mise à jour # 1
je me suis dit le problème, il a été apparemment coulée de objet-HttpResponse de type ne se produit pas pour une raison quelconque, donc de prouver ce point, quand je construisais l'objet manuellement en utilisant l'objet plaine, il a commencé à travailler. Mais évidemment, le lancer manuel est une chose sale et doit comprendre pourquoi le casting ne fonctionnait pas.
if (cachedResponse) {
let httpResponse = new HttpResponse({
status : cachedResponse.status,
body : cachedResponse.body,
headers : cachedResponse.headers,
statusText : cachedResponse.statusText,
url : cachedResponse.url
});
return Observable.of(httpResponse)
};
je l'ai fait et je reçois l'erreur ci-dessous * Type 'HttpHandler' est incessible à taper 'Observable>'. La propriété '_isScalar' est manquante dans le type 'HttpHandler'. * –
shanmohan