,我想用我的服務人員來緩存數據的波動。我的想法是首先返回可能過時的緩存匹配,並且同時啓動獲取請求並在獲取成功時返回該數據。ServiceWorkers:第一返回緩存的響應,並獲取響應異步
這是我在競選非易失性數據的代碼,我想緩存:
return e.respondWith(
caches.match(request.url).then(function(cacheResponse) {
// Found it in the cache
if (cacheResponse) {
console.log('[ServiceWorker] Found it in Cache')
return cacheResponse
// Not in the cache
} else {
console.log('[ServiceWorker] Not in Cache')
return fetch(request).then(function(fetchResponse) {
console.log('[ServiceWorker] Fetched from API', fetchResponse)
// don't cache errors
if (!(fetchResponse && fetchResponse.status === 200)) {
console.log('[ServiceWorker] Fetch error, no cache')
return fetchResponse
}
return caches.open(cacheName).then(function(cache) {
cache.put(request.url, fetchResponse.clone())
console.log('[ServiceWorker] Fetched and Cached Data', request.url)
return fetchResponse
})
})
}
})
)
我怎麼會同時返回cachedResponse
和fetchResponse
異步?這可能嗎?
UPDATE:
我讀過傑克阿奇博爾德的離線食譜,其中他談到cache then network,這是我想要做什麼,但似乎你需要到處添加代碼你在你想要這個'緩存然後網絡'服務的地方撥打電話。
我希望有一種方法可以直接從服務人員那裏做到這一點,儘管我不確定這是可能的,因爲一旦你使用緩存數據返回,你怎麼也可以返回提取數據而不會完全相同從頁面再次請求?
感謝您的幫助!
的可能的複製[服務人員從緩存中獲取然後更新緩存(https://stackoverflow.com/questions/41574723/service-worker-get-from-cache-then-update-cache) –