2016-07-22 10 views
1

以下のようにメッセージを受け取ると、簡単なサービスワーカーの更新があります。これは正常に動作し、キャッシュが更新されます。しかし、次にファイルの1つをアクセス不能にして、障害が発生しているという通知を受け取ろうとしています。リクエストの結果を表示するには?ここ を探しCache.addAll()リクエスト配列へのアクセス方法

[https://developer.mozilla.org/en-US/docs/Web/API/Cache/addAll][1]

国 は、「検索中に作成されたリクエスト・オブジェクトが格納されている応答操作の鍵となります。」 これはどのように解釈されますか?コードにアクセスしましたか?

self.addEventListener('message', event => { 
    console.log('EventListener message ' + event.data); 

event.waitUntil(
    caches.open('minimal_sw').then(cache => { 
     return cache.addAll(fileList).then(function(responseArray){ 
     console.log('EventListener responseArray ' + responseArray); 
     self.skipWaiting(); 
     }); 
    }) 
) 
}); 

答えて

3

根本的な要求のいずれかが2xxステータスコードを持っていない応答を返す場合、それは拒否するように、今年の初め、addAll()動作がchangedました。この新しい動作は、Cache Storage APIをサポートするすべてのブラウザの現行バージョンで実装されています。

したがって、1つ(または複数)の要求が失敗したときに検出する場合は、addAll()呼び出しの最後に.catch()をチェーンすることができます。

はしかし、あなたがaddAll()に文字列の配列を渡す際に、より一般的にあなたの質問に答えるために、彼らはRequestコンストラクタによって暗黙のデフォルト値のすべてを使用してRequestオブジェクトへimplicitly converted(セクション6.4.4.4.1)です。

これらのRequestオブジェクトは一時的ですが、後でthen()で使用するためにどこにも保存されません。 、何らかの理由で、あなたが本当にthen()の内部ネットワーク要求を作成するために使用された実際の根底にあるRequestオブジェクトが必要な場合は、明示的addAll()にそれをRequestオブジェクトの配列を構築して渡すことができますの

var requests = urls.map(url => new Request(url)); 
caches.open('my-cache').then(cache => { 
    return cache.addAll(requests).then(() => { 
    // At this point, `cache` will be populated with `Response` objects, 
    // and `requests` contains the `Request` objects that were used. 
    }).catch(error => console.error(`Oops! ${error}`)); 
}); 

caches.open('my-cache') 
    .then(cache => cache.keys()) 
    .then(keys => console.log(`All the keys: ${keys}`)); 

維持する必要はありません:あなたはCacheオブジェクトを持っているし、(リクエストURLに対応)キーのリストを取得したい場合はコースが、あなたはkeys()メソッドを介して任意の時点でそれを行うことができますリファレンスキャッシュを生成するために使用された元のRequestに変換します。

+0

詳細な回答をいただきありがとうございます。 –

関連する問題