为什么我的 indexedDB.open.onsuccess 事件没有被调用?

Joh*_*ser 5 javascript asynchronous indexeddb google-chrome-app

我以我是使用indexedDB 和异步javascript 的新手这一事实作为这个问题的序言。我正在为 Chrome 应用程序编写一个函数,该函数接收名为 sourceBlob 的数组缓冲区并将其存储在 indexedDB 中。然后,该函数在我之前在应用程序启动时创建的indexedDB 中打开一个数据库,并启动与该数据库的事务。由于某种原因,当我执行此代码时,request.onsuccess 被完全跳过,因此我无法将数据添加到 objectStore。如何确保request.onsuccess被执行?我读到这个问题可能是由于 indexedDB 是异步的这一事实引起的,但我还没有找到解决这个问题的有效方法。

data.indexedDB.addSource = function(sourceBlob) {
//adds source to data base
  var version = 1;
  var request = indexedDB.open("content", version);
  request.onerror = errorHandler;
  request.onsuccess = function(e) {
    db = e.target.result;
    var trans = db.transaction(["nContent"], "readwrite");
    var store = trans.objectStore("nContent");
    var request = store.put(sourceBlob);
    trans.oncomplete = function(e) {
      data.indexedDB.getIndexedSource();
    };

  };
};
Run Code Online (Sandbox Code Playgroud)

dum*_*ter 0

你确定data.indexedDB.addSource有人打电话吗?因为您可以打开浏览器的 JS 控制台(甚至在此页面上)并运行以下命令:

var request = indexedDB.open("content", 1);
request.onsuccess = function(e) { console.log("onsuccess"); }
Run Code Online (Sandbox Code Playgroud)

您将看到显示“onsuccess”。

我建议您尝试制作一个完整的最小示例来显示您的问题。在这样做的过程中,您可能会找到解决方案。