現在、ServiceWorker には、特定の event.respondWith() が終了したかどうかを Service Worker 内で確認する必要があるロジックがあります。その後、キャッシュを削除する必要があります。それを知る方法はありますか。そのイベントを確認しました.respondWith() には then() または callback がありません。
1 に答える
2
Response
キャッシュのクリーンアップが、渡された Promise を満たすために使用されている とは無関係である場合、 (おそらく) が完了したかどうかを気にせずevent.respondWith()
に、イベント ハンドラー内で非同期に開始できます。これは、たとえば、キャッシュのサイズがNエントリを超えるたびにキャッシュをクリーンアップしたい場合に当てはまります。fetch
event.respondWith()
キャッシュのクリーンアップが Promise を満たすために使用されている に固有のものでResponse
ある場合は、ロジックを Promise チェーンに挿入し、有効な で満たしてチェーンを終了するようにします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 に答える