0

IndexedDb を使用する、私が書いたコードの一部をリファクタリングしようとしています。理想的には、IndexedDb を使用することの醜さの一部を抽象化する小さなビジネス ライブラリを作成したいと考えています。たとえば、Get、Add、Update、Delete のメソッドを持つ 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);

問題は、onsuccess コールバックがまだトリガーされていないため、get メソッドで MyApp.db が定義されていないことです。私はまだJavaScriptに慣れていないので、どのオプション/パターンを使用できるか疑問に思っています。助けてくれてありがとう!

4

1 に答える 1