Rav*_*krn 5 indexeddb service-worker
我已经在indexeddb中存储了数据,我试图在服务工作者中访问这些数据.但是没有完成打开indexeddb的请求,它正在等待.因此,我无法访问数据.在解决问题方面需要帮助.下面是我从服务工作者访问数据的代码.
var idbSupported = false;
var db;
self.addEventListener('push', function(){
if("indexedDB" in self) {
idbSupported = true;
}else{ console.log('Indexed db not supported');}
if(idbSupported) {
var openRequest = indexedDB.open("test",1);
openRequest.onupgradeneeded = function(e) {
console.log("Upgrading...");
var thisDB = e.target.result;
if(!thisDB.objectStoreNames.contains("users")) {
thisDB.createObjectStore("users", { autoIncrement: true });
}
}
openRequest.onsuccess = function(e) {
console.log("Success!");
db = e.target.result;
readUser();
}
openRequest.onerror = function(e) {
console.log("Error");
console.dir(e);
}
}
},false);
function readUser(){
var transaction = db.transaction(["users"], "readwrite");
var store = transaction.objectStore("users");
var request = store.get(user_id);
request.onerror = function() {
console.log("Error");
}
request.onsuccess = function() {
console.log("Yolo! Did it");
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将您的代码放在push事件侦听器之外,然后从服务工作线程中无条件运行它,它就会成功运行。我不太确定是什么导致了您所看到的情况,但也许该push事件没有按照您的预期触发?
如果您正在寻找一些展示 Service Worker 中 IndexedDB 使用情况的通用代码,请访问https://github.com/GoogleChrome/samples/blob/gh-pages/service-worker/offline-analytics/service-worker .js是一个可能有帮助的示例。但我认为您发布的代码基本上可以工作。
顺便说一句,没有必要检查是否'indexedDB' in self来自您的 Service Worker 内部。IndexedDB 在 Chrome 和 Firefox 的 Service Worker 实现中都可用,并且我非常假设将来提供 Service Worker 的任何其他浏览器也将在其实现中公开 IndexedDB。
| 归档时间: |
|
| 查看次数: |
1149 次 |
| 最近记录: |