1

現在、ServiceWorker には、特定の event.respondWith() が終了したかどうかを Service Worker 内で確認する必要があるロジックがあります。その後、キャッシュを削除する必要があります。それを知る方法はありますか。そのイベントを確認しました.respondWith() には then() または callback がありません。

4

1 に答える 1

2

Responseキャッシュのクリーンアップが、渡された Promise を満たすために使用されている とは無関係である場合、 (おそらく) が完了したかどうかを気にせずevent.respondWith()に、イベント ハンドラー内で非同期に開始できます。これは、たとえば、キャッシュのサイズがNエントリを超えるたびにキャッシュをクリーンアップしたい場合に当てはまります。fetchevent.respondWith()

キャッシュのクリーンアップが Promise を満たすために使用されている に固有のものでResponseある場合は、ロジックを Promise チェーンに挿入し、有効な で満たしてチェーンを終了するようにしますResponsefetchイベントハンドラーを制御でき、それができると仮定しています。一般的な(テストされていない)アプローチは次のとおりです。

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 に答える