ExtendableEvent.waitUntil()

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

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

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

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

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

構文

extendableEvent.waitUntil(promise);

パラメーター

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());
});

仕様

仕様 状態 コメント
Service Workers
waitUntil() の定義
草案 初期定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
waitUntil
実験的
Chrome 完全対応 40Edge 完全対応 17Firefox 完全対応 44IE 未対応 なしOpera 完全対応 24Safari 未対応 なしWebView Android 完全対応 40Chrome Android 完全対応 40Firefox Android 完全対応 44Opera Android 完全対応 24Safari iOS 未対応 なしSamsung Internet Android 完全対応 4.0
Asynchronous waitUntil
実験的
Chrome ? Edge 完全対応 17Firefox 完全対応 53IE 未対応 なしOpera ? Safari 未対応 なしWebView Android ? Chrome Android ? Firefox Android 完全対応 53Opera Android ? Safari iOS 未対応 なしSamsung Internet Android ?

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。

関連情報