我在这个问题前面提到了我不熟悉使用indexedDB和异步javascript的事实。我正在为chrome应用程序编写一个函数,它接受一个名为sourceBlob的Array缓冲区并将其存储在indexedDB中。然后,该函数在indexedDB中打开一个数据库,该数据库先前在应用程序启动时创建,并启动与该数据库的事务。出于某种原因,当我执行此代码时,请求完全被跳过,因此我无法将我的数据添加到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();
};
};
};
答案 0 :(得分:0)
您确定要调用data.indexedDB.addSource
吗?因为您可以打开浏览器的JS控制台(甚至在此页面上)并运行它:
var request = indexedDB.open("content", 1);
request.onsuccess = function(e) { console.log("onsuccess"); }
您将看到显示“onsuccess”。
我建议您尝试制作一个显示问题的完整最小示例。在这样做的过程中,您可能会找到解决方案。
答案 1 :(得分:0)
在应用程序工作了一段时间之后,我意识到在放弃onsuccess事件之前我正在退出addSource函数。为了解决这个问题,我在函数结束时添加了延迟,现在事件正常启动。谢谢你的帮助。固定代码:
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) {
extron.indexedDB.getIndexedSource();
};
};
var token = 100000;
while(token != 0)
{
token = token-1;
}
};