Guest User

Untitled

a guest
Oct 17th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. const dataUrl = ''; //your data api url
  2.  
  3. (function(dataUrl, Observable) {
  4.  
  5. 'use strict';
  6.  
  7. /******** your impure functions: ***********/
  8.  
  9. //bind data to the view here
  10. const updateViewData = data => {}
  11.  
  12. //you got data from the network, user is online..
  13. const updateViewSetOnline = () => {}
  14.  
  15. //retrieve data from the network
  16. const getFromNetwork = url =>
  17. Observable.fromPromise(
  18. fetch(url)
  19. .then( response => response.json() )
  20. .catch( error => ({ err: 'network' }) )
  21. )
  22.  
  23. //retrieve data from the cache
  24. const getFromCache = url =>
  25. Observable.fromPromise(
  26. caches.match(url)
  27. .then( response => {
  28. if( ! response) throw Error("No cached data")
  29. return response.json();
  30. })
  31. .catch( error => ({ err : error }) )
  32. )
  33.  
  34. //my cache/network observable stream instances
  35. const getFromNetwork$ = getFromNetwork(dataUrl);
  36. const getFromCache$ = getFromCache(dataUrl);
  37.  
  38. Observable.merge(
  39. getFromNetwork$,
  40. getFromCache$.takeUntil(getFromNetwork$)
  41. ).subscribe( updateViewData )
  42.  
  43. getFromNetwork$
  44. .subscribe( updateViewSetOnline )
  45.  
  46. if ('serviceWorker' in navigator) {
  47. navigator.serviceWorker
  48. .register('./service-worker.js')
  49. .then(function() { console.log('Service Worker Registered'); });
  50. }
  51.  
  52. })(dataUrl, Rx.Observable);
Add Comment
Please, Sign In to add comment