,我想用我的服务人员来缓存数据的波动。我的想法是首先返回可能过时的缓存匹配,并且同时启动获取请求并在获取成功时返回该数据。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) –