ExtendableEvent: waitUntil() 方法

Baseline 已廣泛支援

此功能已成熟,可跨多種裝置和瀏覽器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有瀏覽器中可用。

注意:此功能僅在 Service Workers 中可用。

ExtendableEvent.waitUntil() 方法告知事件分發器,有正在進行的工作。它還可以用於檢測該工作是否成功。在 Service Worker 中,waitUntil() 告知瀏覽器,工作會一直進行直到 Promise 解決(settles),如果瀏覽器希望該工作完成,它就不會終止 Service Worker。

Service Worker 中的 install 事件會使用 waitUntil() 將 Service Worker 保持在 installing 階段,直到任務完成。如果傳遞給 waitUntil() 的 Promise 被拒絕,則安裝被視為失敗,並且正在安裝的 Service Worker 會被丟棄。這主要用於確保 Service Worker 在其依賴的所有核心快取成功填充之前,不會被視為已安裝。

Service Worker 中的 activate 事件會使用 waitUntil() 來緩衝功能事件(如 fetchpush),直到傳遞給 waitUntil() 的 Promise 解決。這為 Service Worker 提供了時間來更新資料庫模式和刪除過時的 caches,以便其他事件可以依賴於完全升級的狀態。

waitUntil() 方法必須在事件回撥中首次呼叫,但在此之後可以多次呼叫,直到所有傳遞給它的 Promise 都解決。

語法

js
waitUntil(promise)

引數

promise

一個 Promise,它延長了事件的生命週期。

返回值

無(undefined)。

示例

在 Service Worker 的 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());
});

規範

規範
Service Workers
# dom-extendableevent-waituntil

瀏覽器相容性

另見