繁体   English   中英

IDBDatabase.transaction始终为null

[英]IDBDatabase.transaction is always null

我一直在关注Using IndexedDB页面。

加载页面后,我将创建/加载数据库。

window.App = window.App || {};
App.db = window.indexedDB.open("myapp", 1);

接下来,我为App.db对象定义onerroronupgradeneededonsuccess

onupgradeneeded ,我创建了一个新的对象存储。

最后,由于已创建/加载数据库,因此Javascript会自动调用onsuccess方法。 在这种方法中,我列出了App.db的详细信息。

App.db.onsuccess = function(ev){
    console.dir( App.db );
};

控制台显示,

readyState = "done" result = IDBDatabase transaction = null

我分别使用file:///, http:// localhosthttp://myownserver.that.is.forwarded.to.127.0.0.1.from.domain.provider调用了该页面。

但问题仍然存在。 transaction方法为null,我什么也做不了,开始任何事务。 有什么问题,我想念什么?

indexedDB.open返回一个请求对象( IDBRequest )。 因此,您的App.db将保留该请求。

听起来您已经掌握了升级过程。

完成此操作后,将通过请求的result属性返回连接对象( IDBDatabase实例),然后在连接对象上使用transaction()方法启动事务。 因此,您希望将自己的"success"处理程序编写为:

App.db.onsuccess = function(ev){
    var connection = App.db.result;
    var tx = connection.transaction(stores, mode);
    ...
};

但是更常见的是将连接对象称为db东西,并且在连接打开后无需保留请求,因此您可能要做的是这样的事情:

var openRequest = indexedDB.open("myapp", 1);
openRequest.onupgradeneeded = function(e) {
  var db = openRequest.result;
  db.createObjectStore(...);
  ...
};
openRequest.onsuccess = function(e) {
  App.db = openRequest.result;
  var tx = App.db.transaction(...);
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM