【发布时间】:2023-03-09 11:43:02
【问题描述】:
我以我不熟悉 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();
};
};
};
【问题讨论】:
-
也许错误处理程序被调用了?
-
“跳过”是什么意思?正如您提到的异步问题,您希望代码做什么?
-
我检查了,也没有调用错误处理程序。我与 onsuccess 事件绑定的函数永远不会被调用。我希望一旦打开数据库,就会触发 onsucces 事件,因此我的打开事务的函数将被执行。
-
你的errorHandler函数定义了吗?如果不是,那可能会导致问题。
-
是的,我的 errorHandler 函数已定义并且在我程序的不同部分正常运行。
标签: javascript asynchronous google-chrome-app indexeddb