我正在尝试重构我编写的一些使用 IndexedDb 的代码。理想情况下,我想做的是创建一个小型业务库,抽象出使用 IndexedDb 的一些丑陋之处。例如,我将创建一个 toDoList 对象,该对象将具有一些获取、添加、更新、删除的方法,并且在这些方法中我将调用 IndexedDb。
这是我所拥有的一个例子:
var MyApp = MyApp || {};
(function() {
var req = indexedDB.open("todostore", 1);
req.onerror = function(e) { console.log(e); };
req.onupgradeneeded = function (e) {
var newDB = e.target.result;
newDB.createObjectStore("todostore", { keyPath : "id", autoIncrement : true });
};
req.onsuccess = function () {
MyApp.db = req.result;
};
})();
MyApp.todolist = (function() {
return {
get : function(key, success) {
var tran = MyApp.db.transaction("todostore");
var req = tran.objectStore("todostore").get(key);
req.onsuccess = function (e) {
success(e.target.result);
};
}
};
})();
//consumer of library would ideally just do something like this:
var worked = function(e) {
//do something...
}
MyApp.todolist.get(1, worked);
问题是 MyApp.db 在 get 方法中未定义,因为尚未触发 onsuccess 回调。我还是 javascript 的新手,所以想知道我可以使用哪些选项/模式。谢谢你的帮助!