Dexie JS( IndexedDB ):在addEventListener中使用get()返回未定义的

yyyllmsg  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(204)

我一直致力于chrome扩展项目。
我试图做的是存储输入值,并在按下特定按钮时将其拉出来。
下面是js的部分代码:

import { Dexie } from '../node_modules/dexie/dist/dexie.mjs';
var DBName = 'test';
buttonA.addEventListener('click', () => {
    const inp = document.getElementById("inp");

    const db = new Dexie(DBName);
    db.version(2).stores({
        friend: '++id, name'
    });

    db.friend.add({
        name: inp.value
    })
});

buttonB.addEventListener('click', () => {
    const db = new Dexie(DBName);
    const ch = db.friend;
    console.log("Checking the value in DB: " + ch);
});

当我尝试使用它时,它会在点击buttonA后将任何输入保存到索引DB中(使用Chrome Developer Tool确认),但是当点击buttonB时,日志显示chundefineddb.friend.namedb.name也是如此)。因此,即使我使用get(),它也会返回错误,因为我访问的是未定义的变量。
有人能帮我弄清楚为什么当我点击按钮B时,程序不能正确访问存在的索引DB吗?

  • 谢谢-谢谢
tzdcorbm

tzdcorbm1#

问题:

  1. Dexie的第二个示例没有声明有哪些表,因此db.friend是未知的。
    1.您的代码为每次单击创建一个新的Dexie。重用一个Dexie示例会更好、更快。如果您每次都创建一个新的Dexie示例,则必须在创建后关闭它以避免资源泄漏。
    建议:
    使用version().stores(...)宣告单一Dexie执行严修,让它为您填入'friend'属性。
    此代码最好位于其自己的模块中(如“db.js')。
    在需要存储或读取数据库的任何位置使用该单个Dexie示例。

相关问题