目前我在ServiceWorker中有一个逻辑,我需要在服务工作者内检查一个特定的event.respondWith()是否已经完成,之后我才需要删除缓存。有什么方法可以知道.I检查event.respondWith()没有then()或回调。
答案 0 :(得分:2)
如果你的缓存清理独立于用于履行传递给Response
的Promise的event.respondWith()
,那么你可以(可能)在{{{}}内异步启动它。 1}}事件处理程序,无需担心fetch
是否已完成。例如,如果您想要在大小超过 N 条目的情况下清理缓存,就会出现这种情况。
如果您的缓存清理特定于用于履行承诺的event.respondWith()
,那么您将要将逻辑插入Promise链中,确保您通过履行有效Response
来结束链。我假设您可以控制Response
事件处理程序,并且可以执行此操作。这是一种通用的(未经测试的)方法:
fetch
你不想在你的Promise链中做太多,因为你所做的一切都会导致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!
});
});
被传递到受控页面。