【发布时间】:2018-02-11 00:43:03
【问题描述】:
我想用我的服务人员缓存易失性数据。我的想法是首先返回可能陈旧的缓存匹配,同时触发获取请求并在获取成功时返回该数据。
这是我为要缓存的非易失性数据运行的代码:
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?这可能吗?
更新:
我已经阅读了 Jake Archibald 的离线食谱,他在其中谈到了 cache then network,这正是我想要做的,但看起来你需要在任何你想要这个“缓存”的地方添加代码网络服务。
我希望有一种方法可以直接从服务工作者那里执行此操作,但我不确定这是否可能,因为一旦您返回缓存数据,您如何在不发出完全相同的请求的情况下也返回获取数据再次从页面?
感谢您的帮助!
【问题讨论】:
标签: javascript caching web service-worker