ExtendableEvent.waitUntil()
ExtendableEvent.waitUntil() メソッドは、作業が進行中であることをイベントディスパッチャーに通知します。 また、その作業が成功したかどうかを検出するためにも使用できます。 サービスワーカーの場合、 waitUntil() は、プロミスが決定するまで作業が進行中であることをブラウザーに通知し、サービスワーカーがその作業を完了させたい場合にサービスワーカーを終了させません。
サービスワーカーの install イベントは、 waitUntil() を使用して、タスクが完了するまでサービスワーカーをインストール中 (installing) の段階に保持します。 waitUntil() に渡されたプロミスが拒否された場合、インストールは失敗と見なされ、インストール中のサービスワーカーは破棄されます。 これは主に、依存するすべてのコアキャッシュが正常に読み込まれるまで、サービスワーカーがインストール済み (installed) と見なされないようにするために使用します。
サービスワーカーの activate イベントは、waitUntil() を使用して、waitUntil() に渡されたプロミスが解決するまで、fetch や push などの機能イベントをバッファリングします。 これにより、サービスワーカーはデータベーススキーマを更新し、古いキャッシュを削除する時間を確保できるため、他のイベントは完全にアップグレードされた状態に依存できます。
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