我使用以下代码从Indexed DB读取数据并将其保存在变量allDownloadContent中
ereaderdownload.indexedDB.getAllTodoItems = function() {
/*var todos = document.getElementById("todoItems");
todos.innerHTML = "";
*/
var db = ereaderdownload.indexedDB.db;
var trans = db.transaction(["downloadcontent"], "readwrite");
var store = trans.objectStore("downloadcontent");
var request = store.get(0);
request.onsuccess = function(e) {
console.log(e.target.result);
};
// Get everything in the store;
var cursorRequest = store.openCursor();
cursorRequest.onsuccess = function(e) {
var result = e.target.result;
if(!!result == false)
return;
allDownloadContent.push(result);
result.continue();
};
alert("content "+allDownloadContent[0]);
cursorRequest.onerror = ereaderdownload.indexedDB.onerror;
};
当我从另一个Javascript文件调用getAllTodoItems方法时,我收到一条警告消息内容未定义
由于 cursorRequest.onsuccess 方法执行异步,因此我未定义。
我不能使用网络工作者,因为它不支持chrome。
我在Jquery尝试过承诺。我仍然得到相同的警报信息。
请帮我解决问题。
答案 0 :(得分:3)
目前,所有浏览器仅支持Indexed-db ASync API,您需要做的是向事务oncomplete
事件添加事件侦听器。光标关闭时将触发此事件。从那里你可以回到你的代码:
trans.oncomplete = function (event) {
console.log('transaction completed');
yourFunction();
};