如何知道Event.respondWith已经完成(Event.respondWith()的回调

时间:2016-03-21 21:44:34

标签: service-worker fetch-api

目前我在ServiceWorker中有一个逻辑,我需要在服务工作者内检查一个特定的event.respondWith()是否已经完成,之后我才需要删除缓存。有什么方法可以知道.I检查event.respondWith()没有then()或回调。

1 个答案:

答案 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! }); }); 被传递到受控页面。