是否可以让 Service Worker 等待开始处理 fetch 事件,直到 Service Worker 启动时异步工作完成?
我有一个应用程序外壳,其路由在数据中定义。要在 service worker 启动时安装特定的路由获取处理程序,我需要从 IndexedDB(异步)查找路由数据。
不幸的是,Service Worker 在 IndexedDB 查找完成并设置路由的提取处理之前就开始接受提取事件。
目前,我只是为此硬编码一个特殊情况的默认处理程序,但最好让 service worker 延迟处理 fetch 事件,直到在 service worker 启动时完成 IndexedDB 处理。
我没有看到“waitUntil”的方法,也许我错过了?
最佳答案
一个代码片段会有所帮助,因为我对这个问题不是 100% 清楚......但是做一些猜测:
在您解决提供给 event.waitUntil 的 promise 之前,当您监听安装事件时,SW 不应拦截任何网络请求,因此在那里进行 IDB 设置应该没问题。
一般来说,让 fetch 事件监听器运行而不做任何事情也很好,因为在这种情况下浏览器将正常回退到网络。
总的来说,还值得牢记的是,SW 可以而且确实经常被杀死,因此局部变量不会在接收不同事件之间停留。如果在处理不同的事件时需要一些数据,则应将其保存在 IDB 或 Cache API 中并再次从那里获取。
关于asynchronous - 是否有 Service Worker 启动 waitUntil 来延迟处理获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009861/