在 serviceWorker
推送 promise 解决之前,无法使用 importScript
解决依赖关系;有人可以建议更好的方法来解决这个问题吗?
ServiceWorker fetch
事件:
var iDB; // Global Variable
self.addEventListener("fetch", function(e) {
self.importScripts("dexie.min.js");
var o = new Dexie('database_name');
o.version(1).stores({
iDBStore: "++id,adspotkey"
iDB = o
});
});
服务工作人员推送
事件
self.addEventListener("push", function(e) {
e.waitUntil(getDetails().then(function(ex) {
try {
e = wpSDK.iDB;
return e.iDBStore.where("id").above(0).toArray().then(function(ox) {
console.log(ox);
}
}));
});
注意:
- 在
push
控制台上抛出错误,如下所示类型错误:无法读取未定义(…)的属性“iDBStore”
- 使用Wrapper for IndexedDB - Dexie.js
最佳答案
您应该像这样在后台运行 importScripts
。
self.importScripts("dexie.min.js");
var iDB; // Global Variable
self.addEventListener("fetch", function(e) {
var o = new Dexie('database_name');
o.version(1).stores({
iDBStore: "++id,adspotkey"
iDB = o
});
});
importScripts
是一种同步方法。因此,当您在后台运行此方法时,它将阻止 ServiceWorker 处于事件状态,直到脚本完全加载为止。
关于javascript - `importScript` 无法在 serviceWorker 推送事件之前解决依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40887162/