We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

ExtendableEvent.waitUntil()

这篇翻译不完整。请帮忙从英语翻译这篇文章

ExtendableEvent.waitUntil() 方法扩展了事件的生命周期。在服务工作线程中,延长事件的寿命从而阻止浏览器在事件中的异步操作完成之前终止服务工作线程。

在一个与 install 事件相关联的 EventHandler 被调用时,它延迟将被安装的worker视为 installing ,直到传递的 Promise 被成功地resolve。这主要用于确保:服务工作线程在所有依赖的核心cache被缓存之前都不会被安装。

在一个与 activate 事件相关联的 EventHandler 被调用时,它延迟将 active worker视为已激活的,直到传递的 Promise 被成功地resolve。这主要用于确保:任何功能事件不会被分派到 ServiceWorkerGlobalScope 对象,直到它升级数据库模式并删除过期的缓存条目。

当该方法运行时,如果 Promise 是resolved,任何事情都不会发生;如果 Promise 是rejected,installing 或者 active worker的 state 会被设置为redundant。

如果在 ExtendableEvent 处理程序之外调用 waitUntil(),浏览器应该抛出一个InvalidStateError。 还要注意,多个调用将会堆叠,所产生的promise将被添加到extend lifetime promises(延长生命周期的promise)。

注意: 上述段落描述的行为已经在Firefox 43中被修复 (参见 bug 1189644.)

语法

event.waitUntil(promise)

返回值

None.

参数

一个 Promise.

示例

self.addEventListener('push', function(event) {
  console.log('Received a push message', event);

  var title = 'Yay a message.';
  var body = 'We have received a push message.';
  var icon = '/images/icon-192x192.png';
  var tag = 'simple-push-demo-notification-tag';

  event.waitUntil(
    self.registration.showNotification(title, {
      body: body,
      icon: icon,
      tag: tag
    })
  );
});

规范

Specification Status Comment
Service Workers
waitUntil()
Working Draft Initial definition

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 40.0[1] 44.0 (44.0)[2] 未实现 24 未实现
async waitUntil() ? 53.0 (53.0)[3] 未实现 ? 未实现
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support 未实现 未实现 44.0 (44.0) 未实现 ? 未实现 40.0 [1]
async waitUntil() 未实现 未实现 53.0 (53.0)[3] 未实现 ? 未实现 ?

[1] 在Chrome 46版本之前 waitUntil() 能取任何值而不仅仅是 promises.

[2] Service workers (和 Push) 在Firefox 45 & 52 Extended Support Releases 中被禁用 (ESR.)

[3] ExtendableEvent.waitUntil()现在可以异步调用(请参阅 bug 1263304).

请参见

 

文档标签和贡献者

此页面的贡献者: xiaoxiaojx, flyingsouthwind
最后编辑者: xiaoxiaojx,