首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法读取未定义IndexedDB的属性“事务”

问无法读取未定义IndexedDB的属性“事务”
EN

Stack Overflow用户
提问于 2018-12-25 00:29:20
回答 1查看 9K关注 0票数 5

我使用IndexDB来创建用户的对象存储,但是当试图添加用户时,我在var request = db.transaction(['person'], 'readwrite')行上得到了一个错误。

给出的错误是:

“未定义的TypeError:无法读取未定义的属性‘在test.js:45的添加(test.js:32)’”

我的剧本是这样的:

代码语言:javascript
复制
var request = window.indexedDB.open("connectDB", 1);

request.onerror = function (event) 
{
console.log('The database is opened failed');
};

var db;

request.onsuccess = function (event) 
{
    db = request.result;
console.log('The database is opened successfully');
};

var db;

request.onupgradeneeded = function (event) 
{
    db = event.target.result;
    var objectStore;
    if (!db.objectStoreNames.contains('users'))
    {
        objectStore = db.createObjectStore('users', { keyPath: 'id' });
        objectStore.createIndex('name', 'name', { unique: false });
        objectStore.createIndex('email', 'email', { unique: true });
    }
}

function add() 
{
  var request = db.transaction(['person'], 'readwrite')
    .objectStore('person')
    .add({ id: 1, name: 'Jam', age: 24, email: 'jam@example.com' });

  request.onsuccess = function (event) {
    console.log('The data has been written successfully');
  };

  request.onerror = function (event) {
    console.log('The data has been written failed');
  }
}

add();

如能提供任何帮助,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-25 00:35:42

当db未初始化时,您似乎试图在调用add()期间访问它(请注意,对add()的调用是在执行脚本时立即发生的)。

但是,只有在成功创建数据库连接时才初始化db变量:

代码语言:javascript
复制
request.onsuccess = function (event) 
{
    db = request.result;
    console.log('The database is opened successfully');

    // It is now safe to interact with the database
};

解决这个问题的方法有很多种,不过最简单的方法是将对add()的调用转移到onsuccess处理程序中,如下所示:

代码语言:javascript
复制
request.onsuccess = function (event) 
{
    db = request.result;
    console.log('The database is opened successfully');

    add(); // Add this
};

// add(); <-- remove this from the end of your script

最后,我注意到声明了两个var db;变量--考虑删除其中一个变量。希望这能有所帮助!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53918546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档