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

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
waitUntil
waitUntil may be called asynchronously

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

関連情報