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

浏览器兼容性

另见