1

目前我在 ServiceWorker 中有一个逻辑,我需要在 Service Worker 中检查特定 event.respondWith() 是否已完成,只有在那之后我才需要删除缓存。有什么方法可以知道。我检查了那个事件.respondWith() 没有 then() 或 callback 。

4

1 回答 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 回答