18 lines
		
	
	
	
		
			736 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			18 lines
		
	
	
	
		
			736 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Hit both the cache and the network, setting state for the cached version first,
 | 
						|
// then the network version (as it's assumed to be fresher). Also update the db afterwards.
 | 
						|
export async function cacheFirstUpdateAfter (networkFetcher, dbFetcher, dbUpdater, stateSetter) {
 | 
						|
  let networkPromise = networkFetcher() // kick off network request immediately
 | 
						|
  let dbResponse
 | 
						|
  try {
 | 
						|
    dbResponse = await dbFetcher()
 | 
						|
    stateSetter(dbResponse)
 | 
						|
  } finally {
 | 
						|
    let fetchAndUpdatePromise = networkPromise.then(networkResponse => {
 | 
						|
      /* no await */ dbUpdater(networkResponse)
 | 
						|
      stateSetter(networkResponse)
 | 
						|
    })
 | 
						|
    if (!dbResponse) { // no cached result available, await the network
 | 
						|
      await fetchAndUpdatePromise
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |