Skip to content

Instantly share code, notes, and snippets.

@gastonambrogi
Created August 25, 2017 18:01
Show Gist options
  • Save gastonambrogi/1c784d2c54703c23e12eb85f2239b562 to your computer and use it in GitHub Desktop.
Save gastonambrogi/1c784d2c54703c23e12eb85f2239b562 to your computer and use it in GitHub Desktop.
angular 2 cache http responses
import {Injectable} from '@angular/core';
import {Http, Headers} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/observable/of';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map';
import {Data} from './data';
@Injectable()
export class DataService {
private url:string = 'https://cors-test.appspot.com/test';
private data;
private observable: Observable;
constructor(private http:Http) {}
getData() {
console.log('getData called');
if(this.data) {
return Observable.of(this.data);
} else if(this.observable) {
return this.observable;
} else {
console.log('send new request');
let headers = new Headers();
headers.append('Content-Type', 'application/json');
this.observable = this.http.get(this.url, {
headers: headers
})
.map(response => {
console.log('response arrived');
this.observable = null;
if(response.status == 400) {
return "FAILURE";
} else if(response.status == 200) {
this.data = response.json();
return this.data;
}
// make it shared so more than one subscriber can get the result
})
.share();
return this.observable;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment