serviceWorker.getRegistration 和 serviceWorker.ready.then 之间的区别
Difference between serviceWorker.getRegistration and serviceWorker.ready.then
我正在用 Service Workers 编写我的第一个应用程序,我正在尝试注册以便与 pushManager 交互。
我可以使用以下任一方法执行此操作:
nagivator.serviceWorker.getRegistration()
或
navigator.serviceWorker.ready.then()
我应该使用哪个,有什么区别?
据我所知,第一个不会等到 ServiceWorkerRegistration 有一个活动的 ServiceWorker。最后一个确实如此。
使用 ready 使事情变得更简单,因为它是 "designed in a way that the returned promise will never reject. Instead, it waits until the promise resolves with a service worker registration that has an active worker."(请参阅 Service Worker 规范中的 definition of ready)。
调用 Push API 的订阅方法时,这反过来会导致更少的失败模式。
从 getRegistration() 上下文调用 subscribe,添加了一些额外的失败模式:
[...剪断...]
- 如果注册没有活跃的工作人员,运行以下子步骤:
- 如果注册没有正在安装的 worker 也没有正在等待的 worker,则使用名称为 "InvalidStateError" 的 DOMException 拒绝承诺并终止这些步骤。
- 等待注册的安装工人或等待工人成为其活跃工人。
- 如果注册未能激活任何一个 worker,则使用名称为 "InvalidStateError" 的 DOMException 拒绝承诺并终止这些步骤。
- 一旦注册有活跃的工作人员,请继续执行以下步骤。
[...剪断...]
我正在用 Service Workers 编写我的第一个应用程序,我正在尝试注册以便与 pushManager 交互。
我可以使用以下任一方法执行此操作:
nagivator.serviceWorker.getRegistration()
或
navigator.serviceWorker.ready.then()
我应该使用哪个,有什么区别?
据我所知,第一个不会等到 ServiceWorkerRegistration 有一个活动的 ServiceWorker。最后一个确实如此。
使用 ready 使事情变得更简单,因为它是 "designed in a way that the returned promise will never reject. Instead, it waits until the promise resolves with a service worker registration that has an active worker."(请参阅 Service Worker 规范中的 definition of ready)。
调用 Push API 的订阅方法时,这反过来会导致更少的失败模式。
从 getRegistration() 上下文调用 subscribe,添加了一些额外的失败模式:
[...剪断...]
- 如果注册没有活跃的工作人员,运行以下子步骤:
- 如果注册没有正在安装的 worker 也没有正在等待的 worker,则使用名称为 "InvalidStateError" 的 DOMException 拒绝承诺并终止这些步骤。
- 等待注册的安装工人或等待工人成为其活跃工人。
- 如果注册未能激活任何一个 worker,则使用名称为 "InvalidStateError" 的 DOMException 拒绝承诺并终止这些步骤。
- 一旦注册有活跃的工作人员,请继续执行以下步骤。
[...剪断...]