2015-12-22 2 views
4

Я сохранил данные в indexeddb, и я пытаюсь получить доступ к этим данным в обслуживающем работнике. Но запрос на открытие 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"); 
} 
} 

ответ

2

Если взять код вне слушателя push событий и просто запустить его без всяких условий внутри работника службы, он работает успешно. Я не совсем уверен, что вызывает то, что вы видите, но, возможно, событие push не запускается, как вы ожидали?

Если вы ищете какой-то общий код, демонстрирующий использование IndexedDB у рабочего, https://github.com/GoogleChrome/samples/blob/gh-pages/service-worker/offline-analytics/service-worker.js - образец, который может помочь. Но я думаю, что код, который вы опубликовали, в основном работает.

В стороне, нет необходимости проверять, есть ли у вашего работника службы 'indexedDB' in self. IndexedDB доступен как в приложениях Chrome, так и в Firefox, и я бы очень предположил, что любые другие браузеры, которые будут обслуживать сервисных работников в будущем, также будут подвергать IndexedDB их реализации.

Смежные вопросы