import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/defer'; import 'rxjs/add/observable/of'; import 'rxjs/add/operator/share'; import 'rxjs/add/operator/publishReplay'; import 'rxjs/add/operator/take'; // TODO: This should be pulled out as a part of Flexible Questionnaire Library @Injectable() export class QueryService { private pendingRequests: object = {}; private cachedResponses: object = {}; cachedSrvUrl; constructor(private http: HttpClient) { } query(url, search?) { return this.http .get(url, { params: search }) .catch(err => Observable.throw(err)); } queryCache(url) { if (this.cachedResponses[url]) { } else if (this.pendingRequests[url]) { return this.pendingRequests[url]; } else { this.pendingRequests[url] = this.query(url) .map(res => { this.pendingRequests[url] = null; this.cachedResponses[url] = res; return this.cachedResponses[url]; }) .share(); return this.pendingRequests[url]; } } }