--- title: ExtendableEvent.waitUntil() slug: Web/API/ExtendableEvent/waitUntil tags: - API - ExtendableEvent - Method - Reference - waitUntil translation_of: Web/API/ExtendableEvent/waitUntil ---

{{APIRef("Service Workers API")}}

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

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

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

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

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

構文

extendableEvent.waitUntil(promise);

パラメーター

{{jsxref("Promise")}}。

戻り値

undefined

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

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

仕様

仕様 状態 コメント
{{SpecName('Service Workers', '#dom-extendableevent-waituntil', 'waitUntil()')}} {{Spec2('Service Workers')}} 初期定義

ブラウザーの互換性

{{Compat("api.ExtendableEvent.waitUntil")}}

関連情報