6

我正在使用 Service Worker 编写我的第一个应用程序,并尝试获取注册以便与 pushManager 进行交互。

我可以使用以下任何一种方法来做到这一点:

nagivator.serviceWorker.getRegistration()

或者

navigator.serviceWorker.ready.then()

我应该使用哪个,有什么区别?

4

2 回答 2

5

据我所知,第一个不会等到 ServiceWorkerRegistration 有一个活动的 ServiceWorker。最后一个可以。

于 2015-03-01T16:40:44.210 回答
3

使用 ready 使事情变得更简单,因为它“设计为返回的承诺永远不会拒绝。相反,它会等到承诺通过具有活动工作人员的服务工作人员注册解决”。(参见Service Worker 规范中 ready 的定义)。

在调用 Push API 的 subscribe 方法时,这反过来会导致更少的失败模式。

从 getRegistration() 上下文调用subscribe会增加一些额外的失败模式:

[……剪断……]

  1. 如果注册没有活动的工作人员,请运行以下子步骤:
    1. 如果注册没有正在安装的工作人员和等待的工作人员,则使用名称为“InvalidStateError”的 DOMException 拒绝承诺并终止这些步骤。
    2. 等待注册的安装工人或等待工人成为其活跃工人。
    3. 如果注册未能激活任一工作人员,则使用名称为“InvalidStateError”的 DOMException 拒绝承诺并终止这些步骤。
    4. 一旦注册有一个活跃的工作人员,请继续执行以下步骤。

[……剪断……]

于 2015-03-02T09:05:28.620 回答