2016-03-21 14 views
1

)ServiceWorkerには、特定のevent.respondWith()が終了したかどうかをチェックする必要があるロジックがあります。キャッシュを削除する必要があります。それを知る方法はありますか?そのイベントを確認しました.respondWith()にthen()またはコールバックがありません。Event.respondWithが完了したことを知る方法(Event.respondWith()のコールバック

+1

質問を明確にすることはできますか? – Marco

+0

基本的には、私がevent.respondWith()のコールバック関数を持つことができるかどうか、サービスエンジニアからリクエストが完了したことを知る方法を知りたいですか? – biswpo

答えて

2

キャッシュのクリーンアップが使用されているResponse Promiseがevent.respondWith()に渡された後、fetchイベントハンドラ内で非同期でオフフックさせることができます(event.respondWith()が完了したかどうかは心配する必要はありません)。たとえば、キャッシュをいつでもクリーンアップしたい場合それは過去に成長したNのエントリのサイズ。

キャッシュクリーンアップがPromiseを実行するために使用されているResponseに固有のものである場合、有効なResponseでチェーンを終了することを確認して、プロミスチェーンにロジックを挿入します。私はあなたがfetchイベントハンドラを制御でき、それを行うことができると仮定しています。あなたが行うすべてがResponseが制御ページに渡される遅延になるので、あなたはあなたの約束チェーンの内側あまりしたくない

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! 
    }); 
}); 

:ここでは、一般的な(未テスト)のアプローチです。

+0

'const p'の後に' p.then(_ => {deleteTheCache();}) 'を実行し、' event.respondWith(p) 'だけを実行することもできます。 – mjs

関連する問題