目前我在 ServiceWorker 中有一个逻辑,我需要在 Service Worker 中检查特定 event.respondWith() 是否已完成,只有在那之后我才需要删除缓存。有什么方法可以知道。我检查了那个事件.respondWith() 没有 then() 或 callback 。
问问题
563 次
1 回答
2
如果您的缓存清理独立于Response
用于实现传递给的 Promise的缓存event.respondWith()
,那么您可以(可能)在fetch
事件处理程序中异步启动它,而不必担心是否event.respondWith()
已完成。例如,如果您想在缓存的大小超过N个条目时清理缓存,就会出现这种情况。
如果您的缓存清理特定于Response
用于实现 Promise 的,那么您将需要将逻辑插入到 Promise 链中,并确保通过使用 valid 来结束链Response
。我假设您可以控制fetch
事件处理程序并且可以做到这一点。这是一种通用(未经测试)的方法:
self.addEventListner('fetch', event => {
const p = promiseThatFulfillsWithResponse(); // Your logic goes here.
event.respondWith(p.then(response => {
return caches.open('my-cache-name')
.then(cache => cache.delete(event.request)) // Or whatever you want to delete.
.then(() => response); // Return response at the end of the chain!
});
});
您不想在 Promise 链中做太多事情,因为您所做的一切都会延迟Response
传递到受控页面的时间。
于 2016-03-22T14:57:07.750 回答