web-dev-qa-db-ja.com

event.waitUntilはService Workerで何を行い、なぜ必要なのですか?

MDNでは、Service Workerキャッシュを作成してデータを取り込むために次のことを行うことをお勧めします。

this.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open('v1').then(function(cache) {
      return cache.addAll([
        '/sw-test/',
        '/sw-test/index.html',
        ... etc ...
      ]);
    })
  );
});

私はそのコードを理解していません。 waitUntilメソッドも文書化されており、上記のコードは現時点での唯一の目的であるようです。

ExtendableEvent.waitUntil()メソッドは、イベントの有効期間を延長します。インストールイベントに関連付けられたEventHandlerで呼び出されると、渡されたPromiseが正常に解決されるまで、インストールワーカーのインストール済みとしての処理を遅らせます。これは主に、依存するすべてのコアキャッシュが読み込まれるまで、サービスワーカーがインストールされていると見なされないようにするために使用されます。

私が理解していないのは:

  • waitUntilは一般にコードフローにどのように影響しますか?約束が解決するまで、イベントの伝播を停止しますか?
  • ワーカーキャッシュを開くコンテキストで必要なのはなぜですか?

上記のコードに問題があり、それを理解したいので、この質問をしています。

38
Tomáš Zato

説明にあるように、the ExtendableEvent.waitUntil() method extends the lifetime of the event。メソッド内で呼び出さない場合、Service Workerはいつでも停止できます( 仕様 を参照)。

したがって、waitUntilメソッドは、waitUntilに渡されたプロミスが解決または拒否されるまで、サービスワーカーを終了しないようにブラウザに指示するために使用されます。

特定の質問について:

  • installおよびactivateイベントの場合、サービスワーカーのinstalledおよびactivatedへの状態切り替えを遅延させます( waitUntilメソッドの仕様 、特に段落の最後の部分)。
  • 私の答えの残りは、なぜそれが必要なのかについてすでに答えていると思います。
36
Marco