ExtendableEvent.waitUntil()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.

ExtendableEvent.waitUntil() メソッドは、作業が進行中であることをイベントディスパッチャーに通知します。 また、その作業が成功したかどうかを検出するためにも使用できます。 サービスワーカーの場合、 waitUntil() は、プロミスが決定するまで作業が進行中であることをブラウザーに通知し、サービスワーカーがその作業を完了させたい場合にサービスワーカーを終了させません。

サービスワーカーinstall イベントは、 waitUntil() を使用して、タスクが完了するまでサービスワーカーをインストール中 (installing) の段階に保持します。 waitUntil() に渡されたプロミスが拒否された場合、インストールは失敗と見なされ、インストール中のサービスワーカーは破棄されます。 これは主に、依存するすべてのコアキャッシュが正常に読み込まれるまで、サービスワーカーがインストール済み (installed) と見なされないようにするために使用します。

サービスワーカーactivate イベントは、waitUntil() を使用して、waitUntil() に渡されたプロミスが解決するまで、fetchpush などの機能イベントをバッファリングします。 これにより、サービスワーカーはデータベーススキーマを更新し、古いキャッシュを削除する時間を確保できるため、他のイベントは完全にアップグレードされた状態に依存できます。

waitUntil() メソッドは、最初はイベントコールバック内で呼び出す必要がありますが、その後、すべてのプロミスが解決するまで、複数回呼び出すことができます。

メモ: 上記の段落で説明した動作は、 Firefox 43 で修正されました(Firefox バグ 1180274 を参照)。

構文

js
waitUntil(promise)

引数

Promise です。

返値

なし (undefined)。

サービスワーカーの install イベント内で waitUntil() を使用します。

js
addEventListener("install", (event) => {
  const preCache = async () => {
    const cache = await caches.open("static-v1");
    return cache.addAll(["/", "/about/", "/static/styles.css"]);
  };
  event.waitUntil(preCache());
});

仕様書

Specification
Service Workers
# dom-extendableevent-waituntil

ブラウザーの互換性

BCD tables only load in the browser

関連情報